2009-09-17 3 views
11

Java에서 소켓을 통해 int를 보내는 가장 좋은 방법은 무엇입니까? 지금 당장 내가보고있어int 소켓을 통해 Java로 보내기

sockout.write((byte)(length >> 24)); 
sockout.write((byte)((length << 8) >> 24)); 
sockout.write((byte)((length << 16) >> 24)); 
sockout.write((byte)((length << 24) >> 24)); 

그리고 나서 바이트를 다른 쪽에서 다시 작성하려고 시도했지만 작동하지 않는 것 같습니다. 어떤 아이디어?

감사합니다.

+0

일반적으로 귀하의 방법도 효과가 있지만 아담의 대답은 IMO가 더 좋습니다. 이 일을하는 일반적인 방법은 ((길이 >> i) & (바이트) 0xff) 여기서 i는 (0, 8, 16, 24) 중 하나입니다. 정수의 원래 값이 부정. – abyx

답변

3

직접 사용할 수있는 다른 유형의 스트림이 있습니다. DataOutputStream을 사용할 수 있습니다.

DataOutputStream out; 
try { 
    //create write stream to send information 
    out=new DataOutputStream(sock.getOutputStream()); 
} catch (IOException e) { 
    //Bail out 
} 

out.writeInt(5); 
26

단지 writeInt() 방법을 사용하여 다음 OutputStreamDataOutputStream 로모그래퍼을 싸서, 관찰한다. 유용 할 수있는 다른

뭔가 다른 쪽 끝에서 당신이 DataInputStream 우리의 InputStream을 포장하고 다시 밖으로 int을 읽을 수 readInt()를 사용할 수 있다는 것입니다.

두 클래스에는 다른 원시 유형을 읽고 쓸 수있는 여러 가지 유용한 메소드가 포함되어 있습니다.

+0

분명히 그것이 이루어질 의도였습니다. – abyx

+0

상대방의 java도있는 경우에만. –

+0

@DenisTulskiy - 다른 끝은 모든 언어가 될 수 있습니다. DataOutputStream은 거의 전적으로 언어에 구애받지 않는 출력을 작성합니다 (utf8 문자열 제외). – jtahlborn

0

소량의 데이터를 보내는 경우 문자 데이터 (예 : Integer.toString(length))로 인코딩하고 반대쪽에서 디코딩하는 것은 무리가 아닙니다.