Получать информацию о файле с помощью DataInputStream и записывать ее

#java #network-programming #fileoutputstream #datainputstream

#java #сетевое программирование #fileoutputstream #datainputstream

Вопрос:

Я пытаюсь получить файл, который клиент отправляет с помощью DataInputStream, и записать его в файл.

(Клиент отправляет файл с помощью метода записи DataInputStream (byte[], len, off))

Вот как я пытаюсь это сделать, но он не получает полных данных.

 InputStream in = s.getInputStream(); //s is Socket that is connected.
BufferedInputStream bis = new BufferedInputStream(in);
DataInputStream din = new DataInputStream(bis);

FileOutputStream fos = new FileOutputStream(directory "/" filename);

byte b = din.readByte();
while(b != -1){
fos.write(b);
b = din.readByte();
}
  

Я знаю, что приведенная выше реализация может быть не элегантной.

но я действительно новичок в Java, поэтому, пожалуйста, не говорите мне о плохом стиле

(Я очень признателен, если вы порекомендуете лучший вариант, если знаете)

результирующий файл составляет всего 4 КБ, тогда как он должен быть 401 КБ

Как мне исправить этот код, чтобы мой код работал?

Большое вам спасибо.

Ответ №1:

вы читаете байт, и -1 (приведенное к байту) является допустимым значением байта. вы не хотите останавливаться на -1, но вместо этого должны перехватить исключение EOFException.

вы проверяете значение -1 при использовании одного из стандартных методов InputStream.read() (которые возвращают int , а не byte ).