2016-03-23 6 views
-3

Я не понимаю, зачем создавать байтовый массив в цикле и копировать его. Если я не создаю массив в цикле, код не будет работать. Пожалуйста, объясните мнеЗачем создавать байтовый массив в цикле и скопировать его

ObjectOutputStream outt = new ObjectOutputStream(socket.getOutputStream()); 
InputStream f=new FileInputStream(path); 
byte[] buffer=new byte[10000]; 
int n; 
while ((n=f.read(buffer))>0) 
{ 
    byte[] tmpBuff = new byte[10000]; 
    System.arraycopy(buffer, 0, tmpBuff, 0, n); 
    total_length += n; 
    outt.writeObject(new MyObject(tmpBuff)); 
} 
f.close(); 
+4

Этот код не имеет особого смысла. Чего вы пытаетесь достичь? Что должен представлять MyObject? –

ответ

1

Кажется, что вы пишете ObjectOutputStream, записывая блоки по 10 000. Примечание: вы предполагаете, что ваш файл всегда является точным кратным 10 000 байт.

Когда вы пишете ObjectOutputStream, он отслеживает любые объекты, которые он уже написал. Это означает, что если вы повторно написали buffer, он отправил бы его только один раз. Одно из решений - взять копию, хотя clone() будет проще.

Лучшим решением будет либо

  • использования reset() на ObjectOutputStream, так что вы можете отправить тот же буфер больше, чем один раз.
  • Использование DataOutputStream вместо этого при передаче данных не Объекты.
  • записывайте столько байтов, сколько вы читаете. Таким образом, вы можете обрабатывать файлы, которые не являются точно кратным 10 000 байт.
+0

хорошая защита, спасибо – user3625981