2012-09-05 3 views
0

궁금 : 자바 : 하나 이상의 스트림 유형을 가질 수 있습니까? 일이 성공적으로 같은 것을 할 수 있다면

Socket s = new Socket("", 1234); 
BufferedInputStream in = new BufferedInputStream(s.getInputStream()); 
BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream()); 
ObjectInputStream oin = new ObjectInputStream(s.getInputStream()); 
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); 

또는 그 일을 아마도 더 좋은 방법이 있다면

. 버퍼링 된 I/O 스트림을 통해 원시 데이터를 보내고 세부 사항을 전달하고 프로그램 연결을위한 프로토콜을 설정하는 수단으로 객체 스트림을 사용하기 때문에 물어 봅니다. 지금 막 버퍼링 된 스트림을 사용하고 내 클라이언트/서버 프로토콜에 byte 배열을 사용하려고하지만 byte 배열을 수신하는 딸꾹질을 예상 한 것과 같지 않으므로 == 연산자 및 .equals() 방법이 나를 위해 작동하지 않습니다.

+0

시도해 보셨습니까? 어떤 문제가 있습니까? – kosa

+0

@ Nambari 전 다른 프로젝트에서이 작업을 시도했지만 제대로 작동하지 않았습니다. 나는 내가이 프로젝트에 들어가기 전에 이러한 상황에서 가장 좋은 방법이 있는지 묻기 위해 여기에왔다. – Logan

답변

3

스트림이 혼합되어 있기 때문에 버퍼가 모두 손상되어 혼동을 일으킬 수 있으므로 스트림을 사용할 수 없습니다.

모든 것을 위해 ObjectStream을 사용하십시오.

일반적으로 스트림에 대해 하나의 스트림, 판독기 또는 작성기에서만 읽거나 쓰면됩니다.

+0

그게 내가 궁금해하는거야. 이 경우 파일에서 ObjectStream을 통해 읽은 데이터를 스트리밍 할 수 있습니까? 'write (byte [])'메서드가있는 것을 볼 수 있습니다. BufferedStreams와 같은 방식으로 작동합니까? – Logan

+0

ObjectStream의 모든 메서드를 사용할 수 있습니다. readObject를 writeObject로, readFully (byte [])는 사용자가 쓰는 동일한 데이터 (byte [])를 사용해야합니다. 이들을 혼합하면 모두 부패합니다. writeInt (length)와 같은 플래그를 보내고 길이가 음수이면 Object를 보낼 수 있습니다. –

관련 문제