gpt4 book ai didi

发送包含超过一定大小的字节数据的对象时出现Java StreamCorruptedException

转载 作者:行者123 更新时间:2023-11-30 01:50:30 25 4
gpt4 key购买 nike

我有一个 Java 客户端-服务器(如果这里有人知道的话,可以使用 ocsf)基础设施,我用它来将文件从客户端上传到服务器。客户端实际上是一个 Android 应用程序(不确定在这种情况下是否那么重要)

我这样做是通过读取文件数据(字节),将其包装在一个包含一些其他详细信息(用户 ID 等)的对象中,然后通过 ObjectOutputStream 将此对象发送到服务器.

似乎一切正常,直到文件的字节数组超过一定大小(不确定这个奇怪的阈值是多少,但看起来 645KB 已经太多了)。然后,服务器在尝试从 ObjectInputStream 读取对象时抛出 StreamCorruptedException 并关闭套接字。

包含文件字节的对象消息代码:

public class MessageUploadFile extends MessageToServer {

private static final long serialVersionUID = 2356276507283427913L;
private String _destId;
private TransferDetails _td;
private byte[] _fileData;


public MessageUploadFile(String srcId, TransferDetails td, byte[] fileData){
super(srcId);
_destId = td.getDestinationId();
_td = td;
_fileData = fileData;

}

客户端套接字和流初始化:

 clientSocket= new Socket(host, port);
output = new ObjectOutputStream(clientSocket.getOutputStream());
input = new ObjectInputStream(clientSocket.getInputStream());

使用以下方式发送消息:

 output.writeObject(msg);  

这些是服务器端的流初始化:

 input = new ObjectInputStream(clientSocket.getInputStream());
output = new ObjectOutputStream(clientSocket.getOutputStream());

阅读消息使用:

 msg = input.readObject();

最佳答案

StreamCorruptedException

反序列化数据时可能会抛出 Java StreamCorruptedException。它基本上发生在两种主要情况之一:

您尝试打开一个 ObjectInputStream 围绕一些实际上不是使用 ObjectOutputStream 写入的数据

readObject() 操作期间,流进入“错误的位置”。

来自 java docs :

Thrown when control information that was read from an object stream violates internal consistency checks.

但是我得到了这个带有大消息的异常并转移到字节数组解决方案。

看看这篇文章:http://www.javamex.com/tutorials/io/StreamCorruptedException.shtml

总而言之,将对象与字节数组相互转换并重新创建它

关于发送包含超过一定大小的字节数据的对象时出现Java StreamCorruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33126800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com