2009-09-17 45 views
11

Cách tốt nhất có thể để gửi int thông qua một socket trong Java là gì? Hiện tại, tôi đang xemGửi ổ cắm int qua trong Java

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

và sau đó cố gắng tạo lại nội dung từ byte ở phía bên kia, nhưng dường như không hoạt động. Ý tưởng nào?

Cảm ơn.

+0

Nói chung, cách của bạn cũng nên hoạt động, nhưng câu trả lời của Adam là IMO tốt hơn. Mặc dù, cách thông thường để thực hiện điều này là ((length >> i) & (byte) 0xff) trong đó i là một trong số (0, 8, 16, 24) bảo vệ bạn khỏi các vấn đề trong trường hợp giá trị ban đầu của số nguyên là tiêu cực. – abyx

Trả lời

3

Có các loại luồng khác mà bạn có thể sử dụng, có thể gửi trực tiếp các số nguyên. Bạn có thể sử dụng DataOutputStream. Quan sát,

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

out.writeInt(5); 
26

Quấn bạn OutputStream với một DataOutputStream và sau đó chỉ cần sử dụng phương pháp writeInt().

Điều gì đó có thể hữu ích là ở đầu bên kia, bạn có thể quấn InputStream trong một số DataInputStream và sử dụng readInt() để đọc lại số int.

Cả hai lớp học cũng chứa một số phương pháp hữu ích khác để đọc và viết các loại thô khác.

+0

Rõ ràng cách nó đã được thực hiện. – abyx

+0

Chỉ khi có java của đầu kia. –

+0

@DenisTulskiy - đầu kia có thể là bất kỳ ngôn ngữ nào. DataOutputStream viết gần như hoàn toàn đầu ra ngôn ngữ bất khả tri (ngoại trừ các chuỗi utf8). – jtahlborn

0

Nếu bạn đang gửi một lượng nhỏ dữ liệu, sau đó mã hóa dưới dạng dữ liệu ký tự (ví dụ: Integer.toString(length)) và giải mã ở đầu bên kia không phải là không hợp lý.

Các vấn đề liên quan