【发布时间】:2014-12-19 04:29:13
【问题描述】:
我需要读出一个包含 500000001 个二进制文件的给定大文件。之后我必须将它们翻译成 ASCII。
我的问题是在尝试将二进制文件存储在一个大数组中时发生的。我在数组 ioBuf 的定义处收到警告:
“int 类型的文字 16000000032 超出范围。”
我不知道如何保存这些数字以使用它们!有人有想法吗?
这是我的代码:
public byte[] read(){
try{
BufferedInputStream in = new BufferedInputStream(new FileInputStream("data.dat"));
ByteArrayOutputStream bs = new ByteArrayOutputStream();
BufferedOutputStream out = new BufferedOutputStream(bs);
byte[] ioBuf = new byte[16000000032];
int bytesRead;
while ((bytesRead = in.read(ioBuf)) != -1){
out.write(ioBuf, 0, bytesRead);
}
out.close();
in.close();
return bs.toByteArray();
}
【问题讨论】:
-
你可以尝试分块读取,然后处理。另一种选择是通过文件流式传输。
-
"500000001 二进制文件" 没有意义。你到底什么意思?为什么你试图一次将整个事情读入内存? “将它们翻译成 ASCII”是什么意思?
-
嗨!感谢您的回答!阅读我解决的第一个二进制文件(请参阅下面的答案)。现在我正在努力实现您的想法(分块阅读)!
标签: java byte binaries large-data