Получите информацию о файле, используя DataInputStream и запишите его - PullRequest
0 голосов
/ 05 октября 2011

Я пытаюсь получить файл, который клиент отправляет с использованием 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 Ответ

2 голосов
/ 05 октября 2011

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

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

...