我正在尝试流式传输ObjectOutput
,但我收到上述错误。
CODE:
private void writelogin(int i, int j, int k, int c4, int l, int m, Socket sock) throws IOException, InterruptedException {
ObjectOutputStream dos = new ObjectOutputStream((OutputStream)sock.getOutputStream());
boolean data = true;
int[] btw = new int[]{i,j, k, c4, l, m};
do {
((ObjectOutput) dos).writeObject(btw);
data=false;
} while (data);
dos.flush();
dos.close();}}
我不知道为什么。
例外是通过System.out
而非Errorlog
的outet。
我的服务器接收到的内容: AC ED(有时很多00和其他六位'似乎随机'数字)
我的Stream必须发送的内容: 03 96 144 54 79 05
我的服务器必须接收的内容: 03 60 90 36 4F 05
允许十六进制数是正确的,所以不是问题。
有问题,因为我使用ObjectOutputStream
和Array
,因为我使用DataOutputStream
并通过dos.writeByte(i);dos.writeByte(j);
放置每个块本身,它运行正常。
想出了一些新内容:我的ObjectOutputStream
自己发送AC ED 00 05
...有谁知道如何避免这种情况?我什么也没发送,但他确实没有。
无所谓,找到了一种解决方法。想通过DataOutputStream
甚至可以发送一个数组,所以这是可以避免的。
答案 0 :(得分:1)
您必须在套接字的两端使用相同的ObjectInputStream和ObjectOutputStream,而不是每次需要其中一个时创建一个或另一个。
答案 1 :(得分:0)
以下代码看起来很可疑:
((ObjectOutput) dos).writeObject(btw);
只需尝试,
dos.writeObject(btw);
为什么要进行类型转换,对ObjectOutput也是如此?
编辑:我认为你在数组初始化中遗忘了new
。
int[] btw = new int[]{i,j, k, c4, l, m};