我想用Java读取二进制文件。我知道该文件包含一系列数据结构,如:ANSI ASCII字节字符串,Integer,ANSI ASCII字节字符串。即使假设数据结构的数量已知(N),我如何读取和获取文件的数据?我看到接口DataInput有一个读取字符串的方法readUTF(),但它使用UTF-8格式。我们如何处理ASCII码的情况?阅读结构化二进制文件
0
A
回答
0
最灵活(高效的)的做法,我认为是:
- 打开
FileInputStream
。 - 使用流的
getChannel()
方法获取FileChannel
。 - 使用频道的
map()
方法将频道映射到MappedByteBuffer
。 - 通过缓冲区的各种
get*
方法访问数据。
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();
}
0
我们如何处理ASCII的情况下?
你可以用readFully()来处理它。
NB readUTF()用于由DataOutput.writeUTF()创建的特定格式,以及我没有意识到的其他任何内容。
相关问题
- 1. 读\写结构化二进制文件
- 2. 阅读二进制文件
- 3. 阅读二进制文件
- 4. 阅读二进制文件
- 5. C++二进制文件读入结构
- 6. 阅读Python中的二进制文件到一个结构
- 7. 去 - 阅读与结构的二进制文件
- 8. 写一个结构二进制文件和阅读它
- 9. 讨厌的错误阅读结构从二进制文件(C++)
- 10. 阅读文件的二进制文件
- 11. 文件阅读:feof()二进制文件
- 12. 阅读二进制文件Python来Vb.net
- 13. 阅读二进制文件问题
- 14. 阅读二进制文件的问题
- 15. 阅读二进制文件的matlab
- 16. 阅读PCAP二进制文件到HDFS
- 17. 阅读DWORD从二进制文件
- 18. 如何阅读和二进制文件
- 19. 阅读chunks二进制文件C#
- 20. 阅读二进制
- 21. 阅读Java中的结构化文件
- 22. 在VB.Net中读取DBF文件结构为二进制文件
- 23. 位阅读谜题(阅读C++中的二进制文件)
- 24. 蟒蛇 - 确定字段阅读二进制文件的结尾
- 25. 在二进制文件中包含结构的一个未知数阅读(C#)
- 26. 阅读二进制图像
- 27. 二进制文件和写入结构
- 28. 二进制文件的结构?
- 29. C++结构二进制文件
- 30. 在R读取二进制结构
单纯的代码不是答案。你必须解释它,并解释它是如何回答这个问题的。 – EJP