java - 读取序列化文件 - java

标签 java file serialization binary hex

所以我在读取序列化文件时遇到问题。

更具体地说,我已将一个对象序列化为以十六进制格式编写的文件。当我想从此文件中一次读取一行时,就会出现问题。例如,该文件可能如下所示:

王牌0005 7372 0005 5465 7374 41f2 13c1

215c 9734 6b02 0000 7870

但是,下面的代码读取整个文件(而不是仅第一行)。此外,它还会自动将十六进制数据转换为更易读的内容: ØísrTestAòÁ

....
try (BufferedReader file = new BufferedReader(new FileReader(fileName))) {
        read(file);
    } catch ...
....
public static void read(BufferedReader in) throws IOException{
    String line = in.readLine();
    System.out.println(line); // PROBLEM: This prints every line

    }
}

如果我有一个包含一些随机单词的普通文本文件,这段代码工作得很好,它只打印第一行。我的猜测是问题出在序列化格式上。我在某处(可能是 API)读到该文件应该是二进制的(即使我的文件是十六进制的??)。

我应该怎么做才能从此文件中一次读取一行?

编辑:我得到了很多答案,我很感激。我从来不想反序列化该对象 - 只能读取每个十六进制行(一次一个),以便我可以分析序列化的对象。如果问题不清楚,我很抱歉。

现在我意识到该文件实际上不是以十六进制编写的,而是以二进制编写的。此外,它甚至没有被分成行。我现在面临的问题是读取每个字节并将其转换为十六进制。基本上,我希望数据看起来像上面的十六进制数据。

更新:

imbis 评论帮助我解决了这个问题。
“使用 FileInputStream(或包装它的 BufferedInputStream)并重复调用 read() - 每次调用返回一个字节(从 0 到 255),如果文件中没有更多字节,则返回 -1。这是最简单,但不是最有效的方法(读取数组通常更快)”

最佳答案

该文件不包含十六进制文本,并且未分隔行。

无论您使用什么程序来编辑文件,都会“有效”地将其转换为十六进制,因为如果直接显示它会出现乱码。

如果您使用 ObjectOutputStreamFileOutputStream 写入文件,则需要使用 ObjectInputStreamFileInputStream 读取该文件。

关于java - 读取序列化文件 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23923771/

相关文章:

java - EclipseWindow Builder - JFrame 无法缩放

java - 具有多个帖子资源的 ReSTLet 服务

c# - 完整性和真实性

php - 序列化器 Symfony 上的回调

java - 在 spring Controller 中找不到请求映射

java - 如何将 JUnit Ant 任务配置为仅在失败时生成输出?

java - 空文件引起的EOF异常

python - 来自不同进程的文件同时读/写操作 : working on Windows but not on Linux

java - 如何在Java中使用Base64对未实现Serialized接口(interface)的对象进行编码?

java - Java中枚举字段的序列化