Android InputStream отбрасывает первые два байта (модифицированный BluetoothChat)
Мы использовали код из примера BluetoothChat для отправки и получения байтовых данных из шкалы Bluetooth. Шкала получает команду от устройства, затем отправляет обратно байтовый массив. {2,198,48,48,48,48,199,3} 2 = STX, 198 = начало пакета, 199 = конец пакета и 3 = ETX в нашем протоколе связи.
Все работает просто отлично, за исключением того, что следующий код в BluetoothChatService.java странно реагирует тем, что отбрасывает первые два байта.
/**
* This thread runs during a connection with a remote device.
* It handles all incoming and outgoing transmissions.
*/
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket, String socketType) {
Log.d(TAG, "create ConnectedThread: " + socketType);
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the BluetoothSocket input and output streams
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
Log.e(TAG, "temp sockets not created", e);
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
final byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
// Start the service over to restart listening mode
BluetoothChatService.this.start();
break;
}
}
}
У меня проблема именно со следующим разделом кода:
bytes = mmInStream.read(buffer);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
При отладке и просмотре содержимого буфера в mmInStream.read (buffer) перед его выполнением, буфер содержит правильные данные, которые были возвращены устройством масштабирования, т.е.
{2,198,48,48,48,48,48,199,3}
но как только код был добавлен, первые два байта буфера удаляются, и теперь он по ошибке содержит:
{48,48,48,48,48,199,3}
и именно это обработчик сообщений затем, наконец, переходит к действию.
Для большей ясности я должен добавить, что поток байтов, отправляемых по шкале, представляет собой шестнадцатеричные символы в диапазоне от 00 до FF. По какой-то странной причине строка на самом деле выглядит так в отладчике:
{2,-58,48,48,48,48,48,-57,3}
а затем 2, -58 отбрасываются.
Я заметил, что когда я отправляю байтовый массив через сокет, мне нужно сделать следующее:
byte[] sendBytes = {2,(byte)198,48,48,48,48,48,(byte)199,3}
Когда содержимое этого массива будет отлажено, оно даст {2, -58,48,48,48,48,48, -57,3}
Пожалуйста, поймите, что я новичок в Android - Java, и мне есть чему поучиться. Вся помощь будет оценена. Спасибо Адриан
Я добавил записи в log.i, чтобы лучше понять, что происходит на основе Radu 'совет Похоже, что после того, как я записываю данные на свое устройство по Bluetooth, он отвечает, и мы почему-то читаем только первые два байта, затем отправляем их обработчику сообщений, затем читаем оставшуюся часть пакета, отправленного с устройства, и затем отправляем это отключает обработчик сообщений, но до того, как обработчик даже ответил в первый раз, буфер уже был перезаписан, поэтому к тому времени, когда обработчик пытается прочитать первые два байта, он читает 3-й и 4-й байты ответа пакет, затем немедленно отвечает снова и считывает весь пакет с 3-17-й позиции. Так что, если я могу сказать это просто ... обработчик сообщений отвечает на отправленный буфер только после того, как он был перезаписан. Смотрите журнал ниже:
09-05 13:16:52.093: V/BluetoothSocket.cpp(11279): writeNative
09-05 13:16:52.118: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 2
09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 2
09-05 13:16:52.118: I/IN_BUF_AFTER(11279): -58
09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 0
09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 0
...truncated to save space ...
09-05 13:16:52.163: I/IN_BUF_AFTER(11279): 0
09-05 13:16:52.163: I/IN_BUFFER(11279): We now send to handler.
09-05 13:16:52.168: I/IN_BUFFER(11279): Read Stream into Buffer:
09-05 13:16:52.168: V/BluetoothSocket.cpp(11279): readNative
09-05 13:16:52.168: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 17
09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 44
09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 49
09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 50
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 44
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 85
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 13
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): -57
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 3
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 6
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 0
...truncated to save space ...
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 0
09-05 13:16:52.188: I/IN_BUFFER(11279): We now send to handler.
09-05 13:16:52.193: I/IN_BUFFER(11279): Read Stream into Buffer:
09-05 13:16:52.208: V/BluetoothSocket.cpp(11279): readNative
09-05 13:16:52.208: I/MESSAGE_READ(11279): I am reading 2 bytes
09-05 13:16:52.208: I/Content(11279): The entire array:
09-05 13:16:52.208: I/some hardcoded tag(11279): 0
09-05 13:16:52.208: I/some hardcoded tag(11279): 0
09-05 13:16:52.273: I/MESSAGE_READ(11279): I am reading 17 bytes
09-05 13:16:52.273: I/Content(11279): The entire array:
09-05 13:16:52.273: I/some hardcoded tag(11279): 0
...truncated to save space ...
09-05 13:16:52.283: I/some hardcoded tag(11279): 0
09-05 13:16:52.283: I/some hardcoded tag(11279): 0
09-05 13:16:54.528: V/BluetoothSocket.cpp(11279): writeNative
09-05 13:16:54.553: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 2
09-05 13:16:54.553: I/IN_BUF_AFTER(11279): 2
09-05 13:16:54.553: I/IN_BUF_AFTER(11279): -58
09-05 13:16:54.558: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.558: I/IN_BUF_AFTER(11279): 0
...truncated to save space ...
09-05 13:16:54.618: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.618: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.618: I/IN_BUFFER(11279): We now send to handler.
09-05 13:16:54.618: I/IN_BUFFER(11279): Read Stream into Buffer:
09-05 13:16:54.618: V/BluetoothSocket.cpp(11279): readNative
09-05 13:16:54.623: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 17
09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 44
09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.633: I/IN_BUF_AFTER(11279): 49
09-05 13:16:54.633: I/IN_BUF_AFTER(11279): 50
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 44
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 85
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 13
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): -57
09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 3
09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 6
09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 0
...truncated to save space ...
09-05 13:16:54.653: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.653: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.653: I/IN_BUFFER(11279): We now send to handler.
09-05 13:16:54.653: I/IN_BUFFER(11279): Read Stream into Buffer:
09-05 13:16:54.653: V/BluetoothSocket.cpp(11279): readNative
09-05 13:16:54.658: I/MESSAGE_READ(11279): I am reading 2 bytes
09-05 13:16:54.658: I/Content(11279): The entire array:
09-05 13:16:54.658: I/some hardcoded tag(11279): 0
09-05 13:16:54.663: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/MESSAGE_READ(11279): I am reading 17 bytes
09-05 13:16:54.723: I/Content(11279): The entire array:
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.728: I/some hardcoded tag(11279): 0
09-05 13:16:54.728: I/some hardcoded tag(11279): 0
09-05 13:16:54.728: I/some hardcoded tag(11279): 0
Мой новый код также сбрасывает буфер в 0 перед чтением в последнем потоке, таким образом, обработчик сообщений видит только 0, прежде чем я сделал это, журнал выглядел следующим образом:
09-05 13:06:20.508: V/BluetoothSocket.cpp(10176): writeNative
09-05 13:06:20.533: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 2
09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 2
09-05 13:06:20.533: I/IN_BUF_AFTER(10176): -58
09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.538: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.538: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.553: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.553: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.578: I/IN_BUFFER(10176): We now send to handler.
09-05 13:06:20.578: I/IN_BUFFER(10176): Read Stream into Buffer:
09-05 13:06:20.578: V/BluetoothSocket.cpp(10176): readNative
09-05 13:06:20.578: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 17
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 44
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 49
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 51
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 44
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 85
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 13
09-05 13:06:20.598: I/IN_BUF_AFTER(10176): -57
09-05 13:06:20.598: I/IN_BUF_AFTER(10176): 3
09-05 13:06:20.613: I/IN_BUF_AFTER(10176): 6
09-05 13:06:20.613: I/IN_BUF_AFTER(10176): 0
...truncated to save space ...
09-05 13:06:20.623: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.623: I/IN_BUFFER(10176): We now send to handler.
09-05 13:06:20.623: I/IN_BUFFER(10176): Read Stream into Buffer:
09-05 13:06:20.623: V/BluetoothSocket.cpp(10176): readNative
09-05 13:06:20.628: I/MESSAGE_READ(10176): I am reading 2 bytes
09-05 13:06:20.628: I/Content(10176): The entire array:
09-05 13:06:20.628: I/some hardcoded tag(10176): 48
09-05 13:06:20.628: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/MESSAGE_READ(10176): I am reading 17 bytes
09-05 13:06:20.688: I/Content(10176): The entire array:
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 44
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.693: I/some hardcoded tag(10176): 48
09-05 13:06:20.693: I/some hardcoded tag(10176): 49
09-05 13:06:20.693: I/some hardcoded tag(10176): 51
09-05 13:06:20.693: I/some hardcoded tag(10176): 48
09-05 13:06:20.693: I/some hardcoded tag(10176): 44
09-05 13:06:20.693: I/some hardcoded tag(10176): 85
09-05 13:06:20.693: I/some hardcoded tag(10176): 13
09-05 13:06:20.693: I/some hardcoded tag(10176): -57
09-05 13:06:20.693: I/some hardcoded tag(10176): 3
09-05 13:06:20.693: I/some hardcoded tag(10176): 6
09-05 13:06:21.788: V/BluetoothSocket.cpp(10176): writeNative
09-05 13:06:21.803: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 2
09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 2
09-05 13:06:21.803: I/IN_BUF_AFTER(10176): -58
09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.808: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.808: I/IN_BUF_AFTER(10176): 44
09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 49
09-05 13:06:21.823: I/IN_BUF_AFTER(10176): 51
09-05 13:06:21.823: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.828: I/IN_BUF_AFTER(10176): 44
09-05 13:06:21.828: I/IN_BUF_AFTER(10176): 85
09-05 13:06:21.833: I/IN_BUF_AFTER(10176): 13
09-05 13:06:21.848: I/IN_BUF_AFTER(10176): -57
09-05 13:06:21.848: I/IN_BUF_AFTER(10176): 3
09-05 13:06:21.848: I/IN_BUF_AFTER(10176): 6
09-05 13:06:21.853: I/IN_BUF_AFTER(10176): 0
...truncated to save space ...
09-05 13:06:21.853: I/IN_BUF_AFTER(10176): 0
09-05 13:06:21.853: I/IN_BUFFER(10176): We now send to handler.
09-05 13:06:21.858: I/IN_BUFFER(10176): Read Stream into Buffer:
09-05 13:06:21.858: V/BluetoothSocket.cpp(10176): readNative
09-05 13:06:21.858: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 17
09-05 13:06:21.858: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 44
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 49
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 51
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 44
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 85
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 13
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): -57
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 3
09-05 13:06:21.873: I/IN_BUF_AFTER(10176): 6
09-05 13:06:21.873: I/IN_BUF_AFTER(10176): 0
...truncated to save space ...
09-05 13:06:21.893: I/IN_BUF_AFTER(10176): 0
09-05 13:06:21.893: I/IN_BUFFER(10176): We now send to handler.
09-05 13:06:21.893: I/IN_BUFFER(10176): Read Stream into Buffer:
09-05 13:06:21.898: V/BluetoothSocket.cpp(10176): readNative
09-05 13:06:21.903: I/MESSAGE_READ(10176): I am reading 2 bytes
09-05 13:06:21.903: I/Content(10176): The entire array:
09-05 13:06:21.903: I/some hardcoded tag(10176): 48
09-05 13:06:21.903: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/MESSAGE_READ(10176): I am reading 17 bytes
09-05 13:06:21.958: I/Content(10176): The entire array:
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 44
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 49
09-05 13:06:21.958: I/some hardcoded tag(10176): 51
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 44
09-05 13:06:21.958: I/some hardcoded tag(10176): 85
09-05 13:06:21.958: I/some hardcoded tag(10176): 13
09-05 13:06:21.958: I/some hardcoded tag(10176): -57
09-05 13:06:21.963: I/some hardcoded tag(10176): 3
09-05 13:06:21.963: I/some hardcoded tag(10176): 6
Я надеюсь, что это неЭто не смутило, но на самом деле демонстрирует проблему, с которой многие люди сталкиваются с демонстрационным кодом BluetoothChat, когда они адаптированы для собственного использования. Каким-то образом нам нужно предотвратить перезапись буфера, пока обработчик сообщений не прочитает его. С уважением
Адриан Рэйфорд
Обновленный код работает лучше благодаря Sleep!
public void run() {
Log.i(TAG, "BEGIN IN mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
try {
sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bytes = mmInStream.available();
Log.i("IN_BUFFER", "mmInStream-available bytes: " + Integer.toString(bytes)+ " ");
if (bytes>0){
for(int i=0; i