자바책의 I/O, Stream 관련 쪽 다시 보세요.
위에 보면 IOException 도 무시하게 해놨고
(Socket 관련 전송시 생각보다 다양한 케이스의 exception 이 발생할 수 있음)
read() 에서 -1 인 경우 EOF로 인식을 하는게 맞습니다.
(읽은 값중에 0도 당연히 들어가있을수 있음)
byte 한개씩 읽는것보다는 byte 배열로 읽어오는게 성능상에도 좋구요
한 바이트씩 쓸때마다 flush 를 호출하는것도 낭비죠
저도 -1이 EOF인줄은 이론적으로 알았는데
막상 넥서스s로 테스트해볼때는 0이 EOF였습니다.
정말 혼란스러웠지만 아직 별 문제는 없네요
DataOutputStream dos =
new DataOutputStream(con.getOutputStream());
dos.writeBytes(sb.toString());
FileInputStream fileInputStream = new FileInputStream(videoPath);
int bytesAvailable = fileInputStream.available();
int maxBufferSize = 1024;
int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
int fileSize = Integer.parseInt(String.valueOf(new File(videoPath).length()));
int transByte = 0;
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
transByte += bufferSize;
int percent = Math.round(((float) transByte / fileSize) * 100.0f);
onProgressUpdate(percent);
}
dos.writeBytes(CRLF + HYPEN + boundary + HYPEN + CRLF);
dos.flush();
fileInputStream.close();
dos.close();
제가 작성한 Form data로 파일을 전송하는 소스의 일부분 입니다.
(절대 귀찮아서 복사 붙여넣기 한거 아닙니다.........;;;)
프로젝트 끝난지 한 3개월정도 되는거같은데 잘 동작합니다.




(b=dis.read())!=-1 이거 말구요
int b = dis.read();
while (b > 0) {
dos.write();
b = dis.read();
}
이런식으로 사용해보세요.
그리고 != -1 보다는 > 0 이 좀 더 안전하더라구요