我正在尝试流式传输 ObjectOutput
,但出现上述错误。
代码:
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
输出的。
我的服务器接收到的内容:AC ED(有时是很多 00 和其他六进制“看似随机”的数字)
我的流必须发送的内容: 03 96 144 54 79 05
我的服务器必须接收的内容: 03 60 90 36 4F 05
允许十六进制数是正确的,所以不是问题。
问题就在那里,因为我使用 ObjectOutputStream
和一个 Array
,因为我使用 DataOutputStream
并通过 dos 放置每个 block 本身.writeByte(i);dos.writeByte(j);
工作正常。
发现了一些新东西:我的 ObjectOutputStream
自己发送了一个 AC ED 00 05
......有谁知道如何避免这种情况?我什么都没寄,但他寄了。
没关系,找到解决方法。发现甚至可以通过 DataOutputStream
发送数组,因此避免了这种情况。
最佳答案
在套接字的生命周期中,您必须在两端使用相同的 ObjectInputStream 和 ObjectOutputStream,而不是每次需要其中之一时都创建一个或另一个。
关于android - 获取 StreamCorruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641883/