我正在开发一个客户端/服务器聊天应用程序,它允许用户通过套接字连接发送文件(图像/视频......)。
为了管理所有类型的通信,我使用一个对象“数据包”来存储我想要发送的所有信息。(发件人,收件人,文件......)。
这是我在流中编写的代码示例:
private void write(Packet packet) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(bos);
os.writeObject(packet);
this.outStream.write(bos.toByteArray());
}
而outStream 是一个OutputStream。
这是我的连接运行:
public void run() {
while (isRunning()) {
try {
byte[] buffer = new byte[65536];
// Read from the InputStream
inStream.read(buffer);
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buffer));
Packet p = (Packet) in.readObject();
} catch (IOException e) {
e.printStackTrace();
this.disconnect();
}
}
}
除了文件传输之外,它适用于所有目的!我将文件放在一个 byte[](带有文件流)中,并将数组存储在我的数据包对象中。当服务器接收到通信时,它会在“in.readObject()”上中断,并给我一个漂亮的“java io streamcorruptedexception wrong format: 0”异常。
我尝试使用自定义 byte[](由 string.getBytes() 填充)进行传输,效果非常好。
那么,我做错了什么?