我想用 Java 读取二进制文件。我知道该文件包含一系列数据结构,如:ANSI ASCII 字节字符串、整数、ANSI ASCII 字节字符串。即使我们假设数据结构的数量已知(N),我如何读取和获取文件的数据?我看到接口DataInput有一个方法 readUTF() 来读取字符串,但它使用 UTF-8 格式。我们如何处理 ASCII 的大小写?
问问题
845 次
3 回答
0
尝试
public static void main(String[] args) throws Exception {
int n = 10;
InputStream is = new FileInputStream("bin");
for (int i = 0; i < n; i++) {
String s1 = readAscii(is);
int i1 = readInt(is);
String s2 = readAscii(is);
}
}
static String readAscii(InputStream is) throws IOException, EOFException,
UnsupportedEncodingException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
for (int b; (b = is.read()) != 0;) {
if (b == -1) {
throw new EOFException();
}
out.write(b);
}
return new String(out.toByteArray(), "ASCII");
}
static int readInt(InputStream is) throws IOException {
byte[] buf = new byte[4];
int n = is.read(buf);
if (n < 4) {
throw new EOFException();
}
ByteBuffer bbf = ByteBuffer.wrap(buf);
bbf.order(ByteOrder.LITTLE_ENDIAN);
return bbf.getInt();
}
于 2013-04-17T22:38:01.067 回答
0
我们如何处理 ASCII 的情况?
你可以用 readFully() 来处理它。
注意 readUTF() 是由 DataOutput.writeUTF() 创建的特定格式,我不知道其他任何东西。
于 2013-04-17T22:55:08.363 回答
0
我认为最灵活(和有效)的方法是:
- 打开一个
FileInputStream
. FileChannel
使用流的getChannel()
方法获得一个。MappedByteBuffer
使用通道的方法将通道映射到 amap()
。- 通过缓冲区的各种
get*
方法访问数据。
于 2013-04-17T21:47:33.837 回答