Java将文件转为字节数组

FileInputStream

利用FileInputStream读取文件

FileInputStream是InputStream的子类,用于从文件中读取信息,构造器接收一个File类型或表示文件路径的String类型。
 

File file = new File("filePath");
FileInputStream fis = new FileInputStream(file);

ByteArrayOutputStream

利用ByteArrayOutputStream将FileInputStream中的文件数据读出来

ByteArrayOutputStream是用来在内存中创建缓冲区,所有送往“流”的数据都要放置在此缓冲区中。
 

ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int len = -1;
while((len = fis.read(b)) != -1) {
    bos.write(b, 0, len);
}

注意:ByteArrayOutputStream的write方法有三种重载形式:

  • write(int b)
    写入指定字节
  • write(byte[] b)
    写入整个字节数组b
  • write(byte[] b, int off, int len)
    写入字节数组b,从b的第off下标开始,写入len个字节。

这里没有使用第二中,而是使用了第三种,在代码中每次获取读入缓冲区b中的数量,一般为1024(因为定义b的时候显示指定了长度),只有当读到结尾的时候,可能不够1024个字节了,也会读取实际的读取字节数,但是在写入缓冲区的时候,如果不指定写入的数量,即不指定len,那么就会将整个b全部写入,即使b中只有一部分内容,但是依然会写入1024个字节。这将导致使用toByteArray时,得到的字节数组不是实际长度!

这样就将文件流从InputStream中写入了ByteArrayOutputStream中。

利用ByteArrayOutputStream的toByteArray()方法得到文件的字节数组。
 

byte[] fileByte = bos.toByteArray();

Java byte转化成file
 

//拿到文件
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/aaa.jpg");

//根据文件构建文件输出流
FileOutputStream fos = new FileOutputStream(file);

//写byte到文件输出流里
fos.write(bytes, 0, bytes.length);

//刷新并关闭
fos.flush();
fos.close();

猜你喜欢

转载自blog.csdn.net/az44yao/article/details/87854336