0

클라이언트가 DataInputStream을 사용하여 보내는 파일을 수신하려고 시도하고 파일에 기록하려고합니다.DataInputStream을 사용하여 파일 정보 수신 및 쓰기

여기 내가 할 노력하고 있어요 방법은 있지만, 전체 데이터를 수신하지 않습니다 (클라이언트의 DataInputStream 쓰기를 사용하여 파일 (바이트 [], 렌, 오프) 방법을 보낸다).

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(); 
} 

나는 위의 구현이 우아하지 않을 수도 있음을 알고 있습니다.

하지만 난 그렇게 나쁜 스타일에 대해 저와 조상하시기 바랍니다 자바 정말 새로운 오전

(당신이 하나를 더 추천하면 당신이 알고 있다면 정말 감사)가 있어야한다 반면

결과 파일은 4킬로바이트입니다 401KB

코드 작동을 위해이 코드를 어떻게 수정해야합니까?

대단히 감사합니다.

답변

2

바이트를 읽는 중이고 -1 (바이트로 캐스트)이 유효한 바이트 값입니다. 당신은 -1에서 멈추고 싶지는 않지만 대신 EOFException을 잡아야한다.

byte이 아닌 int을 반환하는 표준 InputStream.read() 메서드 중 하나를 사용할 때 -1을 테스트합니다.

+0

감사합니다. 지금 코드를 수정했습니다! –