Arquivos e Bytes

Eu to tentando enviar um arquivo de 3mb atraveis de socket ,mais aquando o celular recebe da OutOfMemory ,alguem sabe como resolver ?
Aqui vai o codigo

Servidor

File f=new File(arquivo);
saida.writeUTF(f.getName);
saida.flush();
int size=(int)f.length();
saida.writeInt(size);
saida.flush();
byte b=new byte[size];
 fReader = new FileInputStream(f);
 BufferedInputStream buffReader = new BufferedInputStream(fReader);
 DataInputStream fIN = new DataInputStream(buffReader);
fIN.read(b, 0, size);
saida.write(b, 0, size); 
saida.flush();

Celular

FileConnection file = (FileConnection) Connector.open(PATHFILE + entrada.readUTF());
                                file.create();
                                DataOutputStream out = file.openDataOutputStream();
                                int size = entrada.readInt();
                                byte[] b = new byte[size];
                                entrada.read(b, 0, size);
                                out.write(b, 0, size);
                                out.flush();
                                file.close();
                                out.close();

Sera que resolve se usar bytearrayinputstream?

Você está tentando ler o arquivo todo para a memória RAM do celular. Como os recursos são bem limitados, acontece a exceção.

Ao invés disso, você deveria usar um pequeno buffer para receber os dados e ir salvando em disco (no cartão de memória ou na memória de armazenamento do celular).