Java TCP:读/写POJO
我必须通过只连接一次的TCP传输POJO。我正在使用下面的代码发送和接收数据Java TCP:读/写POJO,java,tcp,io,pojo,Java,Tcp,Io,Pojo,我必须通过只连接一次的TCP传输POJO。我正在使用下面的代码发送和接收数据 public static void sendPacket(DataPacket packet, OutputStream out) throws Exception { if (packet != null) { byte[] lenArray = new byte[2]; byte[] data = ReadAndWriteFileUtil.serializeObject(p
public static void sendPacket(DataPacket packet, OutputStream out) throws Exception {
if (packet != null) {
byte[] lenArray = new byte[2];
byte[] data = ReadAndWriteFileUtil.serializeObject(packet);
lenArray[0] = (byte) (data.length >>> 8);
lenArray[1] = (byte) (data.length & 0xFF);
byte[] serializedPacket = new byte[2 + data.length];
System.arraycopy(lenArray, 0, serializedPacket, 0, 2);
System.arraycopy(data, 0, serializedPacket, 2, data.length);
System.out.println("Send Length: " + (serializedPacket.length-2));
out.write(serializedPacket);
//out.flush();
}
}
public static byte[] receivePacket(InputStream in) throws Exception {
byte[] buf = receivePacket(2, in);
int length = ((buf[0] & 0xFF) << 8) + (buf[1] & 0xFF);
System.out.println("Length: " + length);
byte[] data = receivePacket(length, in);
return data;
}
private static byte[] receivePacket(int length, InputStream in)
throws Exception {
int dataRec = 0;
byte[] data = new byte[length];
while (dataRec < length) {
long n = in.read(data);
if (n < 0) {
break;
}
dataRec += (int) n;
}
if(dataRec <= 0) {
data = null;
}
return data;
}
publicstaticvoidsendpacket(DataPacket-packet,OutputStream-out)抛出异常{
if(数据包!=null){
字节[]lenArray=新字节[2];
byte[]data=ReadAndWriteFileUtil.Serialized对象(数据包);
lenArray[0]=(字节)(data.length>>8);
lenArray[1]=(字节)(data.length&0xFF);
byte[]serializedPacket=新字节[2+数据.length];
System.arraycopy(lenArray,0,序列化数据包,0,2);
System.arraycopy(数据,0,序列化数据包,2,数据.长度);
System.out.println(“发送长度:+(serializedPacket.Length-2));
out.write(序列化数据包);
//out.flush();
}
}
公共静态字节[]receivePacket(InputStream in)引发异常{
字节[]buf=接收数据包(2,in);
整数长度=((buf[0]&0xFF)您根本不应该读取单独的数据包,只需写入和读取对象即可。允许JavaObjectOutputStream
和ObjectInputStream
执行它们的操作job@Germann使用ObjectOutputStream和ObjectInputStream会增加对象的大小开销o be transfer.AFAIR您仍然可以提供自定义序列化/反序列化,并通过这样做避免大小开销。@Germann谢谢。成功了:)