- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码将我的对象和 byte[] 写入文件,其中 sigBytes 是我的 byte[]
ObjectOutputStream outputOS = new ObjectOutputStream(new FileOutputStream(outputFile));
outputOS.writeInt(sigBytes.length);
outputOS.write(sigBytes);
outputOS.writeObject(text);
outputOS.close();
然后当我执行下面的代码时,我得到一个 java.io.OptionalDataException
ObjectInputStream inputIS = new ObjectInputStream(new FileInputStream(INPUT));
int length = inputIS.readInt();
byte[] sigBytes = new byte[length];
inputIS.read(sigBytes, 0, length);
String text = (String) inputIS.readObject();
下面是我在 String text = (String) inputIS.readObject()
处得到的错误:
java.io.OptionalDataException at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371) at encryption3.Encryption3.decrypt(Encryption3.java:34) at encryption3.Encryption3.main(Encryption3.java:53)
编辑我不能让错误重复如下???我真的厌倦了这个..
public static void doThings() {
try {
File file = new File("C:/edges/input.ext");
String text = "Hello";
file.createNewFile();
byte[] sigBytes = (text).getBytes();
ObjectOutputStream outputOS = new ObjectOutputStream(new FileOutputStream(file));
outputOS.writeInt(sigBytes.length);
outputOS.write(sigBytes);
outputOS.writeObject(text);
ObjectInputStream inputIS = new ObjectInputStream(new FileInputStream(file));
int length = inputIS.readInt();
byte[] sigBytes2 = new byte[length];
inputIS.read(sigBytes2, 0, length);
String text2 = (String) inputIS.readObject();
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(EncryptionError.class.getName()).log(Level.SEVERE, null, ex);
}
}
最佳答案
我相信我明白这里可能出了什么问题......你目前正在使用 read(sigBytes)
这不保证它将读取您请求的所有数据。一般来说,InputStream.read(byte[])
和 InputStream.read(byte[], int, int)
只保证它们在返回之前会读取一些 数据,除非流已关闭。他们读取的数据完全有可能比要求的少——如果你通过网络读取数据,这种情况经常发生,例如,流可以返回它已经收到的数据,但不会永远阻塞等待更多数据即将到来。
如果只读取了你的部分数据,那么后续的readObject
调用将从原始数据中的某个任意点读取,这很容易导致抛出异常,因为它不太可能是有效对象表示的开始。
在这种情况下,我相信你想要:
inputIS.readFully(sigBytes);
哪里 readFully
保证填充字节数组,否则如果它在完成之前到达流的末尾将抛出异常。
关于java - 我在 ObjectStream 中的以下写作和阅读出了什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35070008/
我正在尝试使用从 Socket 获取的 ObjectInputStream 和 ObjectOutputStream 在客户端和服务器之间发送数据包。然而,我在尝试将对象发送到流中时得到了一些奇怪的结
我一直在开发一个聊天客户端/服务器以熟悉 java,但我遇到了一个我不明白的逻辑错误。 我正在通过 ObjectOutputStream(Message 对象,参见 ref)发送一个对象,它包含字段和
下面的代码将我的对象和 byte[] 写入文件,其中 sigBytes 是我的 byte[] ObjectOutputStream outputOS = new ObjectOutputStream(
这就是我的问题。 我有一个客户端和一个服务器java程序。每一方都与另一方建立并管理一个 ObjectInputStream/ObjectOutputStream。 我希望能够发送对象(假设发送的所有
这个问题已经有答案了: StreamCorruptedException: invalid type code: AC (1 个回答) 已关闭 9 年前。 我正在构建一个 4 人网络扑克游戏。我首先创
我有这段代码: package com.company; import java.io.IOException; import java.io.ObjectInputStream; import ja
所以我在从对象流存储或加载 HashMap 时遇到问题。文件已保存,我可以看到它存储了某种信息。问题是当我尝试读取 HashMap 时,它给了我一个 EOF 错误。预先感谢您的帮助。 public s
我尝试了很长时间来解决这个问题,最后决定寻求专家的帮助。我已经使用套接字编程开发了服务器客户端应用程序,并且我的客户端能够成功连接到服务器。现在我尝试根据客户端的请求通过服务器的套接字发送对象,我的服
我正在尝试将 Key 类型的公钥对象发送到我的服务器。但我没有让这个运行。协议(protocol)如下所示: [命令]\n[序列化 key 对象] 客户端使用此代码: Socket admin; Pr
这个问题在这里已经有了答案: Appending to an ObjectOutputStream (6 个答案) 关闭 8 年前。 至于现在,当我尝试 append 一个对象时,我将得到 java
我有一个ObjectInputStream,它有一个java.sql.Timestamp对象。我想读取发送的实际值,不受时区的影响。 (客户端与服务器位于不同的时区)。 我该怎么做? // ois i
希望你一切顺利。从昨天开始,奇怪的事情发生在我身上。 我有以下用于保存 JSON 的代码。 public static boolean saveCacheJson(String pathToCach
我是一名优秀的程序员,十分优秀!