2010-01-02 3 views
3

자바를 사용하여 작성중인 게임 서버의 네트워크 주문을 짧게 보내야합니다. 네트워크 주문에 대해 읽었지만 데이터 이전에 전송 된 짧은 정보를 찾을 수 없습니다. 누군가가 나에게 그것이 무엇인지, 그리고 Java로 클라이언트에 보내는 방법을 설명 할 수 있습니까?네트워크 주문 짧은 (Java)

답변

6

Java NIO 바이트 버퍼는 바이트 순서 변경을 지원합니다. 따라서 네트워크 바이트 순서는 Big Endian입니다.

// Allocate a big endian byte buffer 
ByteBuffer bb = ByteBuffer.allocate(4096); 
bb.order(ByteOrder.BIG_ENDIAN); 
bb.putShort(12345); 

// Write the buffer to an NIO channel 
bb.flip(); 
channel.write(bb); 

바이트 순서는 단일 바이트보다 큰 숫자 값의 바이트가 저장되는 순서입니다. Big Endian (가장 중요한 바이트가 먼저)과 Little Endian (최하위 바이트가 먼저)의 두 가지 맛이 있습니다.

1

java에서 short int는 2 바이트입니다. 네트워크 바이트 순서는 상위 바이트를 먼저 보내고, 그 다음으로 높은 순서 바이트를 보내고, 하위 바이트는 마지막으로 보낸다. 당신이 다음 OutputStream oshort i가있는 경우

o.write((i >> 8) & 0xff); 
o.write(i & 0xff); 

는 네트워크 바이트 순서에 짧은을 보낼 수 있습니다. 자동으로 네트워크 바이트 순서로 쓰는 방법이 writeShort() (및 writeInt, writeLong 등) 인 DataOutputStream을 사용하는 것이 좋습니다.

0

OutputStream을 DataOutputStream으로 래핑 할 수 있습니다.

그런 다음 DataOutputStream.writeShort을 사용할 수 있습니다. 계약에 따라이 메소드는 네트워크 순서로 데이터를 씁니다.