java - 从字节数组中检索数据

标签 java io

我正在尝试实现 tail 程序并想要打印文件的最后 n 个字节。我使用 RandomAccessFile 变量来存储文本文件中的数据。当我尝试检索数据并将其打印到控制台时,我得到如下信息:

-n1
65109710979710979710810979710810510510979710910659711010510979711410011897114107109797114100119111108102106597114111110

如何正确地从字节数组中检索数据?

这是我的代码:

RandomAccessFile raf = new RandomAccessFile(file, "r");
            byte[] b = new byte[n];
            raf.readFully(b, 0, n);
            for (int i = 0; i < n; i++) {
                System.out.print(b[i]);
            }

最佳答案

您正在打印字节值。转换例如一个字节数组到一个String,您可以在System.out.println上打印,尝试以下操作:

System.out.println(new String(b));

如果您希望将每个字节(如在循环中)转换为可打印的char,您可以执行以下转换:

for (int i = 0; i < 10; i++) {
    char c = (char) (b[i] & 0xFF);
    System.out.print(c);
}

byte 只是一个字节大小(8 位),而 Java 中的 char 大小为 16 位(2 个字节)。因此打印的字节没有意义,它不是一个完整的字符。

参见this link了解更多信息。

关于java - 从字节数组中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27769901/

相关文章:

c - 是否可以将 fwrite() 原始数据写入标准输出?

java - 如何在 JTable (Swing) 中处理 Hibernate session ?

java - Selection 根据 Shoe Id 升序排列存储在 Array 中的鞋子

java - 无法在 Lucene+Tika 上返回带有重音符号的单词的结果

io - 读取未格式化的二进制文件: Unexpected output - Fortran90

java - BufferedReader 未通过套接字接收消息

java - 接口(interface)中的默认方法,但只有静态最终字段

java - 使用 ASM 4.0 如何创建简单的 Getter?

java - 我可以在文本文件中使用 Scanner 类来获取信息吗?

php - 使用 proc_open 流式传输运行时生成的 gzip 文件