2013-08-08 1 views
1

Я пытаюсь обмениваться файлами между моим компьютером & устройством Android по Wi-Fi. Странная вещь - текстовые и звуковые файлы прекрасно переносятся, а изображения и видеофайлы не отображаются. Вот основная часть коды:Ошибка отправки ТОЛЬКО изображения/видеофайла

Отправитель:

BufferedOutputStream writer = new BufferedOutputStream(client.getOutputStream()); 
InputStream stream = new FileInputStream(file); 
while ((read = stream.read(buffer)) != -1) 
    writer.write(buffer, 0, read); 

Приемник:

BufferedInputStream input = new BufferedInputStream(client.getInputStream()); 
OutputStream outputStream = new FileOutputStream(file, true); 
while (!store.complete) { 
    read = input.read(buffer, 0 , MAX_SIZE_OF_BUFFER); 
    String data = new String(buffer); 
    // Need to do some data manipulation (like removing a string which i appended 
    // while sending) 
    outputStream.write(data.getBytes()); 
} 

Примечания: Даже размер изображения/видео файла в приемнике равный отправляемому файлу, но он не может отобразить.

Спасибо заранее! :)

ответ

1

Вы не можете предположить, что преобразование байта [] в String и преобразование его обратно в байт [] даст вам исходный байт [].

Например, следующий делает не выводит исходный массив байт:

byte[] buffer = {-127}; 
    for (byte b : new String(buffer).getBytes()) { System.out.print(" " + b); } 

Чтобы решить проблему, сделать ваши манипуляции с данными (добавление и удаление данных) в виде байт и не преобразовать в и от String.

+0

Спасибо !! :) Было бы очень полезно, если бы вы могли объяснить мне, что это происходит. –

+1

Я не могу найти краткое объяснение, но в основном это потому, что Java использует UTF-16, который является кодировкой переменной длины. Возможно, последовательность байтов в моем примере недопустима UTF-16, и поэтому базовые байты изменяются во время преобразования из байта [] в String. – Loedolff