当前位置: 首页 > 知识库问答 >
问题:

Java ObjectInputStream在读取原语时引发EOFEException

梁成双
2023-03-14

我很难理解Java中输出/输入流的行为。

ObjectOutputStream实现了DataOutput接口,因此作为DataOutputStream,它具有编写原语的方法。

但反转写入的字节ObjectInputStream会引发EOF。

    byte array[]=new byte[50];
    byte value=2;
    System.out.println(value); //prints 2


    ByteArrayOutputStream os=new ByteArrayOutputStream();
    ObjectOutputStream oss=new ObjectOutputStream(os);
    oss.writeByte(value);

    array = os.toByteArray();

    //get back the original value from the byte array
    ObjectInputStream ois=new ObjectInputStream(new ByteArrayInputStream(array));
    byte result=ois.readByte(); // -> throws EOF Exception (see below)

    System.out.println("Result -> "+result);

引发此异常

Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2827)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:971)
    at z.reti.TestOOS.main(TestOOS.java:21)

使用其他原语引发相同的异常。用字节包装器类替换基元字节(并使用读/写对象),问题消失了。。。

有没有一种方法可以将ObjectOutputStream和ObjectInputStream与原语一起使用?

共有1个答案

东方震博
2023-03-14

您没有关闭ObjectOutputStream。只需添加oss即可。执行oss后关闭()。writeByte(value),您的程序应该能按预期工作。

 类似资料:
  • 无法理解为什么此代码会抛出InputMismatchExcure。我试图阅读几行字符串输入和打印出每一行。这是我的代码:

  • 输出为 预期输出

  • 所以我使用了DataInputStream、FileInputStream、BufferInputStream、FileReader、BufferedReader、Scanner。它们都抛出FileNOtFoundException或CorruptedStreamException。

  • 问题内容: 这真让我抓狂。我正在使用ASP.NET MVC。我有一个带有HttpPost动作的控制器,该动作充当另一个服务器(不在我的控制下)调用的回调URL。我想动态读取发布到它的JSON,而无需使用WebAPI或模型绑定。该URL还具有传递给它的查询字符串参数。 回调URL如下所示: http://domain.com/callback?secret=1234 我尝试使用以下方法阅读发布的输入

  • 问题内容: 在 Android平台上从InputStream读取时,我遇到一个奇怪的问题。我不确定这是否是Android特有的问题,或者 总体上我做错了什么。 唯一特定于Android的是此调用: 这会从Android资产返回文件的InputStream。无论如何, 这是我遇到的问题: 当read()执行时,它抛出IOException。奇怪的是, 如果我进行了两个连续的单字节读取(或任意数量的单

  • 我试图使用jmeter中的csvdata config元素读取csv文件,以便测试多次登录,但是当我试图从csv文件中读取值时,我得到了附加在结果后面的引号。请告诉我如何去掉请求参数中传递的这些逗号 请找到我的csv数据配置和excel文件,并要求附件中的参数截图