[완료]java에서 socket write는 손실이 생길수 없나요?
안녕하세요
자바를 하다 막히는 부분이 너무 많아서 염치 불구하고 계속 질문을 드리겠습니다.
java에서 write는 손실이 생길수 없는가요?
여기 아래를 보면 read_data로 메세지를 전송받다가 끊어질때를 대비하는걸 만들었는데요
write에서는 생기지 않는가 하는게 궁금합니다.
public static byte[] read_data(InputStream in, int len) throws Exception
{
// if(len < 1) return new byte[0];
int bcount = 0, n = 0, read_retry_count = 0;
byte buf[] = new byte[len];
while(bcount < len) {
n = in.read(buf, bcount, len - bcount);
if(n > 0) bcount += n;
else if(n == -1) throw new IOException("inputstream has returned an unexpected EOF");
else if(n == 0 && ++read_retry_count == 10) throw new IOException("inputstream-read-retry-count( 10) exceed !");
}
return buf;
}
//////////////////////////////////////////
//소켓 전송부분의 간략한 내용
client = new Socket(ipAddress, port);
bos = new BufferedOutputStream(client.getOutputStream());
bos.write(send);
이런식으로 전송을하게 되는데요 api를 찾아봐도 BufferedOutputStream 클래스의
write는 리턴값이 없습니다.
없는 이유는 전송중 손실이 안되어서 인건지 아님 다른 이유에서인지 알수가 없네요
다른 이유에서라면 전송중 손실을 막는 함수를 구현해야하는데 얼마나 전송한지를 리턴하지
않으니 좀 막막하네요
답변 부탁드립니다.
대부분의 자바 API는
대부분의 자바 API는 에러 처리 위해 리턴값 보다는 예외(Exception)를 이용합니다.
언급하신 write() 메소드를 API 문서에서 찾아보면 다음과 같이 정의되어 있습니다.
public void write(byte[] b) throws IOException
이 메소드는 I/O 에러가 발생했을때 IOException 예외를 발생시는데 이 예외를 적절히 처리하시면 됩니다.
그리고 넘겨준 byte배열이 얼마나 전송됐는지는 - OutputStream을 직접 구현하지 않는 이상 - 일반적으로 알아낼 방법이 없습니다.
자바에서 예외(Exception) 처리는 매우 중요한 부분입니다. 개념과 쓰임을 꼭 익히시기 바랍니다.
개인적으로 자바 API 문서는 일관성 있게 매우 잘 만들어졌다고 생각합니다.
C의 레퍼런스 가이드처럼 꼭 옆에 끼고 꼼꼼히 살피면 클래스나 메소드의 쓰임에 큰 어려움은 없을 겁니다.
답변 감사합니다.
답변 감사합니다.
예외 처리를 꼭 익혀야 겠네요 도움 감사합니다.(_ _)
댓글 달기