Ars*_*niy 70 java file-io android file
可能重复:
Java中的文件到byte []
我想从文件中读取数据并将其解组为Parcel.在文档中不清楚,FileInputStream具有读取其所有内容的方法.为了实现这一点,我做了以下事情:
FileInputStream filein = context.openFileInput(FILENAME);
int read = 0;
int offset = 0;
int chunk_size = 1024;
int total_size = 0;
ArrayList<byte[]> chunks = new ArrayList<byte[]>();
chunks.add(new byte[chunk_size]);
//first I read data from file chunk by chunk
while ( (read = filein.read(chunks.get(chunks.size()-1), offset, buffer_size)) != -1) {
total_size+=read;
if (read == buffer_size) {
chunks.add(new byte[buffer_size]);
}
}
int index = 0;
// then I create big buffer
byte[] rawdata = new byte[total_size];
// then I copy data from every chunk in this buffer
for (byte [] chunk: chunks) {
for (byte bt : chunk) {
index += 0;
rawdata[index] = bt;
if (index >= total_size) break;
}
if (index>= total_size) break;
}
// and clear chunks array
chunks.clear();
// finally I can unmarshall this data to Parcel
Parcel parcel = Parcel.obtain();
parcel.unmarshall(rawdata,0,rawdata.length);
Run Code Online (Sandbox Code Playgroud)
我认为这段代码看起来很丑陋,我的问题是:如何将文件中的数据读取到byte []中?:)
Luk*_*der 138
打电话给任何一个
byte[] org.apache.commons.io.FileUtils.readFileToByteArray(File file)
byte[] org.apache.commons.io.IOUtils.toByteArray(InputStream input)
Run Code Online (Sandbox Code Playgroud)
从
如果您的Android应用程序的库占用空间太大,您可以使用commons-io库中的相关类
幸运的是,我们现在在nio包中有一些方便的方法.例如:
byte[] java.nio.file.Files.readAllBytes(Path path)
Run Code Online (Sandbox Code Playgroud)
小智 62
这也有效:
import java.io.*;
public class IOUtil {
public static byte[] readFile(String file) throws IOException {
return readFile(new File(file));
}
public static byte[] readFile(File file) throws IOException {
// Open file
RandomAccessFile f = new RandomAccessFile(file, "r");
try {
// Get and check length
long longlength = f.length();
int length = (int) longlength;
if (length != longlength)
throw new IOException("File size >= 2 GB");
// Read file and return data
byte[] data = new byte[length];
f.readFully(data);
return data;
} finally {
f.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*aný 37
如果你使用谷歌番石榴(如果你不这样做,你应该),你可以打电话:ByteStreams.toByteArray(InputStream)或Files.toByteArray(File)
dom*_*som 17
这对我有用:
File file = ...;
byte[] data = new byte[(int) file.length()];
try {
new FileInputStream(file).read(data);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
Viv*_*sse 13
用一个ByteArrayOutputStream.这是过程:
InputStream读取数据ByteArrayOutputStream.InputStream到OutputStreambyte[]在ByteArrayOutputStream使用toByteArray()方法看看下面的apache commons函数:
org.apache.commons.io.FileUtils.readFileToByteArray(File)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164411 次 |
| 最近记录: |