Java 将文件转为字节数组知识总结及实例详解

 更新时间:2016年12月22日 14:43:06   投稿:lqh  
这篇文章主要介绍了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中Jar包反编译解压和压缩操作方法

    Java中Jar包反编译解压和压缩操作方法

    JAR文件就是Java 档案文件Java Archive,它是 Java 的一种文档格式,这篇文章主要介绍了Java中Jar包反编译解压和压缩,需要的朋友可以参考下
    2023-09-09
  • 分布式调度XXL-Job整合Springboot2.X实战操作过程(推荐)

    分布式调度XXL-Job整合Springboot2.X实战操作过程(推荐)

    这篇文章主要介绍了分布式调度XXL-Job整合Springboot2.X实战操作,包括定时任务的使用场景和常见的定时任务,通过本文学习帮助大家该选择哪个分布式任务调度平台,对此文感兴趣的朋友一起看看吧
    2022-04-04
  • Java编程环境搭建和变量基本使用图文教程

    Java编程环境搭建和变量基本使用图文教程

    这篇文章主要介绍了Java编程环境搭建和变量基本使用,结合图文形式详细分析了java编程语言环境搭建、配置、变量、注释的基本使用方法,需要的朋友可以参考下
    2020-02-02
  • spring注入配置文件属性到java类

    spring注入配置文件属性到java类

    这篇文章主要为大家介绍了spring注入配置文件属性到java类实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Maven发布封装到中央仓库时候报错:no default secret key

    Maven发布封装到中央仓库时候报错:no default secret key

    这篇文章主要介绍了Maven发布封装到中央仓库时候报错:no default secret key,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 详解java中动态代理实现机制

    详解java中动态代理实现机制

    这篇文章主要为大家介绍了java中动态代理实现机制的相关资料,需要的朋友可以参考下
    2016-01-01
  • AJAX SpringBoot 前后端数据交互的项目实现

    AJAX SpringBoot 前后端数据交互的项目实现

    本文主要介绍了AJAX SpringBoot 前后端数据交互的项目实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java使用JDK与Cglib动态代理技术统一管理日志记录

    Java使用JDK与Cglib动态代理技术统一管理日志记录

    这篇文章主要介绍了Java使用JDK与Cglib动态代理技术统一管理日志记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Servlet生命周期与工作原理详解

    Servlet生命周期与工作原理详解

    这篇文章主要为大家详细介绍了Servlet生命周期与工作原理的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 基于Maven pom文件使用分析

    基于Maven pom文件使用分析

    本文详细介绍了Maven项目的核心配置文件pom.xml的结构和各个元素的用途,包括项目基础信息、依赖管理、仓库配置、构建配置、版本控制、分发和报告配置等,帮助读者全面了解Maven项目的构建和管理过程
    2024-12-12

最新评论