【问题标题】:Retrieving data from byte Array从字节数组中检索数据
【发布时间】:2015-03-02 10:08:23
【问题描述】:

我正在尝试实现 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]);
            }

【问题讨论】:

  • 请您发布产生该结果的代码。
  • 改用System.out.println(b[i])。这将为每个数字开始一个新行。这就是你想要的吗?
  • 我正在阅读的文件是一个包含单词的文本文件。因此,我希望将一些单词写入控制台。我不明白为什么要打印这些数字

标签: java io


【解决方案1】:

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

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

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

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

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

请参阅this link 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2013-12-07
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多