我有一个bin文件,我需要将其转换为字节数组。谁能告诉我怎么做?
这是我到目前为止所做的:
File f = new File("notification.bin");
is = new FileInputStream(f);
long length = f.length();
/*if (length > Integer.MAX_VALUE) {
// File is too large
}*/
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+f.getName());
}
但它不起作用......
Kaddy
答案 0 :(得分:2)
尝试使用此
public byte[] readFromStream(InputStream inputStream) throws Exception
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
byte[] data = new byte[4096];
int count = inputStream.read(data);
while(count != -1)
{
dos.write(data, 0, count);
count = inputStream.read(data);
}
return baos.toByteArray();
}
顺便问一下,你想要一个Java代码或C ++代码吗?看到你问题中的代码,我认为它是一个java代码,因此给了它一个java答案
答案 1 :(得分:1)
使用内存映射文件可能会更好。见this question
答案 2 :(得分:1)
在Java中,一个简单的解决方案是:
InputStream is = ...
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] data = new byte[4096]; // A larger buffer size would probably help
int count;
while ((count = is.read(data)) != -1) {
os.write(data, 0, count);
}
byte[] result = os.toByteArray();
如果输入是文件,我们可以预先分配正确大小的字节数组:
File f = ...
long fileSize = f.length();
if (fileSize > Integer.MAX_VALUE) {
// file too big
}
InputStream is = new FileInputStream(f);
byte[] data = new byte[fileSize];
if (is.read(data)) != data.length) {
// file truncated while we were reading it???
}
但是,使用NIO可能有更有效的方法来完成此任务。
答案 3 :(得分:0)
除非你真的需要这样做,否则可能会简化你正在做的事情。
在for循环中执行所有可能看起来像是一种非常光滑的方式,但是当你需要调试并且没有立即看到解决方案时,它会让你自己陷入困境。
答案 4 :(得分:0)
在此answer中,我从网址
中读取您可以修改它,以便InputStream来自File而不是URLConnection。
类似的东西:
FileInputStream inputStream = new FileInputStream("your.binary.file");
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte [] buffer = new byte[ 1024 ];
int n = 0;
while (-1 != (n = inputStream.read(buffer))) {
output.write(buffer, 0, n);
}
inputStream.close();
等
答案 5 :(得分:0)
尝试开源库apache commons-io 的 IOUtils.toByteArray(的inputStream)强> 您不是第一个而不是最后一个需要读取文件的开发人员,不需要每次都重新创建它。