【发布时间】:2014-03-20 01:58:24
【问题描述】:
我有一个二进制文件(实际上是一个 dBF),我想用 Java 读取。我正在使用 FileInputStream 和 BufferedReader,然后将所需的字节读取为 char[]。
FileInputStream fis;
char[] header = new char[32];
try {
fis = new FileInputStream(source_url);
BufferedReader br;
String line;
br = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
br.read(header);
....
问题是我读入数组的值并不总是文件中的值。例如,值 0xE1 被读取为 0xFD。我尝试了不同的字符集,没有任何变化,并将值读取为各种类型的 long、int、byte,并使用格式字符串转为 hex,在所有情况下它看起来都像 0xFD。
这些值是明确错误的,我可以在 C++ 程序中正常读取,因为它可以理解无符号整数,并且可以在 hex 文件查看器中读取。
我是否使用正确的类来读取二进制数据?我错过了什么吗?我试图避免使用外部库,因为我只是想读取应该非常简单的文件。
【问题讨论】:
-
如果它是一个二进制文件,那么它是 NOT utf,并且文件中各种完全可以接受的字节序列将被误解为多字节 UTF-8 字符。
-
名为
XxxxReader的类用于阅读文本。名为XxxxxInputStream的类用于读取二进制数据。
标签: java