【问题标题】:Sending images ObjectOutputStream发送图像 ObjectOutputStream
【发布时间】: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


【解决方案1】:

您应该使用缓冲输入输出流而不是对象。由于对象流旨在处理 java 对象的序列化和反序列化。

【讨论】:

  • String[] 和 byte[] 可序列化的 Java 对象。
  • 我同意这一点,但在我的一个大学项目中,我遇到了类似的问题,解决方案就像上面一样。
猜你喜欢
  • 2012-02-23
  • 1970-01-01
  • 2012-06-04
  • 2018-11-06
  • 1970-01-01
  • 2015-11-17
  • 2014-10-18
  • 1970-01-01
  • 2014-10-07
相关资源
最近更新 更多