2012-01-03 2 views
1

Мне нужно передать байт [] через TCP Socket в сторону android-client.
я пытался использовать следующий код:Передача байта [] через TCP Socket in android

public static int readBytes(byte[] myByteArray) throws IOException { 
    InputStream in = socket.getInputStream(); 
    DataInputStream dis = new DataInputStream(in); 

    int len = dis.readInt(); //<-here i get the error 

    byte[] data = new byte[len]; 
    if (len > 0) { 
     dis.readFully(data,0,len); 
    } 
    myByteArray=data; 
    return data.length; 
} 

, но я получаю следующее сообщение об ошибке:

12-23 17:30:49.814: E/AndroidRuntime(11717): java.lang.OutOfMemoryError: array size too large(Heap Size=5699KB, Allocated=3403KB, Bitmap Size=78KB)

ответ

0

Вы, вероятно, получите OutOfMemoryError на приведенной ниже строке. (Линия, которая выделяет новую память с помощью new.)

печати len, прежде чем делать выделение, и вы, вероятно, увидите, что это огромного количества (намного больше, чем вы ожидаете).

Log.d("YOU_TAG", "len = " + len); 

Предположительно вы не отправить размер массива байтов на передающей стороне. (Или, если вы этого не сделаете, чтение/запись вышла из синхронизации.)

+0

вы правы, я не отправлять на стороне сервера размер массива байтов, но весь массив байтов я отправляю данные с помощью Socket.Send (byte []) - сторона сервера написана в C# (это настольное приложение). Как я могу изменить свою функцию для чтения весь байт []? – user1127431

+0

Вы не можете. Вам нужно начать с отправки длины массива. – aioobe

+0

Я видел, что в C# существует метод Socket.Receive (byte []), аналогичного метода в java нет? – user1127431

0

вы должны прочитать в замкнутом цикле, как это:

while(true){ 
int len = dis.readInt(); 
} 
+0

Я думаю, что это для серверной части – user1127431

Смежные вопросы