Java将文件转为字节数组
Java将文件转为字节数组
关键字:文件,文件流,字节流,字节数组,二进制
摘要:最近工作中碰到的需求是,利用http传输二进制数据到服务器对应接口,需要传输userId, file(加密后)等一系列混合后的二进制数据。本文旨在记录自己在使用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(fis); 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将文件转为字节数组 关键字:文件,文件流,字节流,字节数组,二进制 摘要:最近工作中碰到的需求是,利用http传输二进制数据到服务器对应接口,需要传输userId, file(加密后)等一系列混合后的二进制数据。本文旨在记录自己在使用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(fis); 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();
上一篇:
多线程四大经典案例
下一篇:
Redis在项目中的地位及使用场景剖析