#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
).