方法一
public static byte[] readFile(File file) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
byte[] buffer = new byte[102400];
int length;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
return outputStream.toByteArray();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
方法二:
public static byte[] readFile(File file) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
int length = inputStream.available();
byte[] buffer = new byte[length];
inputStream.read(buffer);
return buffer;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
问题与总结:
两种方式都可以读取文件字节流,对于小文件的一次性读取比较方便;
后来发现一个区别,在做Android图片裁剪上传(小米手机测试)的时候,如果立刻用方法二读取,则不到文件内容。如果延时一段时间(比如1秒),则读取正常。
原因可能是文件系统当时还没有更新,无法获得文件长度。
使用方法一则没有这个限制,裁剪完成立即读取也是正常!
所以,文件字节流读取推荐使用方法一!