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将文件转为字节数组的更多相关文章

  1. java 读取文件的字节数组

    /*文件64位编码*/ public static void main(String[] args) {    byte[] fileByte = toByteArray(newFile);   St ...

  2. Java中文件与字节数组转换

    注:来源于JavaEye 文件转化为字节数组: http://www.javaeye.com/topic/304980 /** * 文件转化为字节数组 * * @param file * @retur ...

  3. java对获取的字节数组进行处理

    java对获取的字节数组bytes[]进行处理: 第一种,直接将该字节数组转换为字符串(部分): String content = ,); //从位置0开始获取2个字节 这样,对获取的数据报进行全部转 ...

  4. 通过http URL 获取图片流 转为字节数组

    通过http URL 获取图片流 转为字节数组 读取本地文件转为数组 /** * 获取 文件 流 * @param url * @return * @throws IOException */ pri ...

  5. JAVA中文件与Byte数组相互转换的方法

    JAVA中文件与Byte数组相互转换的方法,如下: public class FileUtil { //将文件转换成Byte数组 public static byte[] getBytesByFile ...

  6. JAVA 文件转字节数组转字符串

    public static void main(String[] args) throws IOException { byte[] bytes = FileUtils.readFileToByteA ...

  7. 用FileInputStream读文件,字节数组接收,不知道文件的大小时怎么办

    FileInputStream in = new FileInputStream(文件路径File); byte[] buffer = new byte[in.available()]; in.rea ...

  8. java读写文件小心缓存数组

    一般我们读写文件的时候都是这么写的,看着没问题哈.   public static void main(String[] args) throws Exception {   FileInputStr ...

  9. java将文件转为UTF8工具类

    package hiveTest; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File ...

随机推荐

  1. java 读文件路径问题

    文件路径:右键点击src新建Source Folder,创建结果与src目录同级. C:\Users\lenovo\workspace\timedTask\config\userinfo.proper ...

  2. Java 中的内存泄露

    1.当你完成对流的读写时,应该通过调同close方法来关闭它,这个调用会释放掉十分有限的系统资源,否则,如果一个应用程序打开了过多的流而没有关闭,那么系统资源将被耗尽.

  3. PYTHON 全局变量和局部变量

    #局部变量,只能调用函数体内的变量 def fun(): a = 234 print(a) #全局变量,在函数体外声明,在函数体内都可调用 b = 'gyc' def fun(): a = 234 p ...

  4. BZOJ 1923: [Sdoi2010]外星千足虫

    Description 给出几个异或方程组求解,\(n \leqslant 2000\) Sol 高斯消元. 直接消元就行,遇到自由元就直接输出,同时记录一下用到的最高行数. 复杂度不科学就可以用 b ...

  5. Java 读写XML

    package dome4jTest; import java.io.FileWriter; import java.io.IOException; import java.net.URL; impo ...

  6. JdbcTemplate中queryForObject的EmptyResultDataAccessException问题

    在使用Spring提供的JdbcTemplate中名为queryForObject API进行数据库查询时有时会抛出如下异常提示息,org.springframework.dao.EmptyResul ...

  7. 0ctf – mobile – boomshakalaka writeup

    作为一个web狗,一道web都没做出来Orz...做出来一道apk,纪念一下在ctf中做出的第一道apk... 首先在模拟器或者真机中安装一下apk看到是一个cocos2dx的打飞机游戏 根据题目提示 ...

  8. vim技巧

    (三)多窗口操作 改变高度:res +n(增加n行的高度)n ctrlw  +/-改变宽度:vertical res +n(增加n列的宽度)n ctrl w >/< (一)缩进 vim提供 ...

  9. vue学习

    2016年12月2日 今天学习Vue.js,对于未知的知识,一脸懵逼.记录学习新知识的路程,为以后学习更多的新知识一个引导.以后学会了之后再回来看看, 回忆一下会与不会的区别在哪.这样以后学习可以更快 ...

  10. cisco-log

    每个日志消息被关联一个严重级别,用来分类消息的严重等级:数字越低,消息越严重.严重级别的范围从0(最高)到7(最低).  日志消息的严重级别,使用logging命令可以用数字或者名称来指定严重性.  ...