【发布时间】:2011-12-06 06:36:43
【问题描述】:
我遇到了一些我无法想出下降解决方案的东西。我从服务器向客户端发送了一些字符串 [] 消息,但现在我也想发送图像。问题是我在客户端检查对象,而不是字节 [],这给我处理图像时带来了问题。
现在我将它用于传入的字符串[]:
public void run()
{
while(active)
{
try
{
Object o;
o = input.readObject();
System.out.println("Received from server!");
if ( o instanceof String[])
{
String[] names = (String[]) o;
Refresh.getInstance().update( names );
}
}
catch (OptionalDataException e) { e.printStackTrace(); Terminate(); }
catch (ClassNotFoundException e) { e.printStackTrace(); Terminate(); }
catch (IOException e) { e.printStackTrace(); Terminate(); }
}
}
但现在我希望这个流能够同时处理 String[] 和 bytes[],任何建议都会很棒,我迷路了 :(
我想要这样的东西:
if ( o instanceof byte[])
{
// ...
}
但这没关系,因为 o = input.readObject() 在图像文件到来时给了我这个:
12-05 23:00:20.255:W/System.err(16157):java.io.StreamCorruptedException:格式错误:ac
写入字节的代码:
FileInputStream fis = new FileInputStream("images\\test.jpg");
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
ObjectOutputStream oos = new ObjectOutputStream(serverSocket.getOutputStream()) ;
oos.writeObject(buffer);
【问题讨论】:
-
你用什么来写字节。确保使用 writeObject(bytes) 而不是 write(bytes)。
-
以下适用于我的盒子:pastebin.com/xP2T0Ux2。你写数据的方式一定有问题。请发布重现问题的 SSCCE。
-
真的没有那么多了。无法为您提供可运行的 SSCCE,但无论如何重要的是:pastebin.com/ybx4ZK7K。与您的示例不同的是,我通过网络发送字节,并且永远无法使用 ByteArrayInputStream。
-
尝试正确读取文件(read() 不一定会填满整个缓冲区),尝试刷新输出流,并且不要在构造函数中启动线程。
-
呸,我试图创建一个新的对象输出流,但问题是 >.
标签: java image objectoutputstream