从字节数组中检索数据
Retrieving data from byte Array
我正在尝试执行 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]);
}
您正在打印 byte
值。转换例如可以在 System.out.println
上打印的 String
的字节数组尝试以下操作:
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);
}
A byte
只是一个字节大小(8 位),而 Java 中的 char
是 16 位(2 字节)。因此打印的字节没有意义,它不是一个完整的字符。
有关详细信息,请参阅 this link。
我正在尝试执行 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]);
}
您正在打印 byte
值。转换例如可以在 System.out.println
上打印的 String
的字节数组尝试以下操作:
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);
}
A byte
只是一个字节大小(8 位),而 Java 中的 char
是 16 位(2 字节)。因此打印的字节没有意义,它不是一个完整的字符。
有关详细信息,请参阅 this link。