ByteArrayOutputStream与InputStream互相转换方式

 更新时间:2021年12月10日 14:32:04   作者:Mr-先森你好  
这篇文章主要介绍了ByteArrayOutputStream与InputStream互相转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

ByteArrayOutputStream与InputStream互相转换

InputStream 转为 ByteArrayOutputStream

public Reader(InputStream input) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        try {
            while ((len = input.read(buffer)) > -1) {
                baos.write(buffer, 0, len);
            }
            baos.flush();
        } catch (IOException e) {
            throw new Exception("Illegal flow.");
        } finally {
            try {
                input.close();
            } catch (IOException e) {
                logger.error("file stream shutdown failed.");
            }
        }
        this.baos = baos;
}

ByteArrayOutputStream 转为 InputStream

 private InputStream streamTran(ByteArrayOutputStream in) {
        return new ByteArrayInputStream(in.toByteArray());
    }

Java字节数组流(ByteArrayInputStream和ByteArrayOutputStream)

1、FileInputStream、FileOutputStream、FileReader、FileWriter是存储在硬盘上的

硬盘上的资源java虚拟机是无权直接访问的,必须借助操作系统,java虚拟机借助完了之后要通知操作系统释放资源

在这里插入图片描述

2、把源头换成电脑上的一块内存(字节数组),既然是一块内存那么java就可以直接访问,因为是java虚拟机的一块内存。不用关闭(释放)

3、所有的东西都可以转成字节数组(字符串转成字节数组、任何一个数据(包括12、包括3.14、包括一个一个的对象都可以转成字节数组))

转成字节数组有什么好处?

字节数组就为二进制了,方便网络上进行传输

4、文件可以无限制的往里面加内容,但是内存速度快、量小,所以内存(字节数组)不允许不建议量特别的大

在这里插入图片描述

ByteArrayInputStream(byte[] buf) 参数为一个字节数组

创建一个 ByteArrayInputStream ,使其使用 buf作为其缓冲区数组

ByteArrayInputStream代码示例

/*
 * ByteArrayInputStream(byte[] buf) 
 * 创建一个 ByteArrayInputStream ,使其使用 buf作为其缓冲区数组
 * 
 * 四个步骤:字节数组输入流
 * 1、创建源:字节数组 不要太大
 * 2、选择流
 * 3、操作
 * 4、释放资源:可以不用处理
 */
public class IOTest07 {
	public static void main(String[] args) {
		// 1、创建源
		byte[] src = "talk is cheap show me the code".getBytes();
		// 2、选择流
		InputStream is = null;
		try {
		is = new ByteArrayInputStream(src);
		// 3、操作(分段读取)
		byte[] flush = new byte[5];//缓冲容器
		int len = -1;//接收长度
			while((len=is.read(flush))!=-1) {
				// 字节数组-->字符串(解码)
				String str = new String(flush,0,len);
				System.out.println(str);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			// 4、 释放资源
			try {
				if (null != is) {
					is.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

ByteArrayOutputStream代码示例

/*
 * ByteArrayOutputStream()不需要指定(源)目的地()参数为空,不用传源头,写完之后 主动去数组里面拿 toByteArray()
 * 
 * 字节数组输出流 ByteArrayOutputStream
 * 1、创建源:内部维护(内部根据数据要多大给你多大)
 * (内部根据数据要多大给你多大)当数据写入缓冲区时,缓冲区会自动增长。 数据可以使用toByteArray()和toString() 
 * 2、选择流:不关联源
 * 3、操作(写出内容)
 * 4、释放资源:可以不用
 * 
 * 获取数据:toByteArray
 */
public class IOTest08 {
	public static void main(String[] args) {
		// 1、创建源:内部维护(内部根据数据要多大给你多大)
		// ByteArrayOutputStream()不需要指定(源)目的地()参数为空
		byte[] dest = null;
		// 新增方法:父类没有的方法子类有
		// 能够使用多态的两种:父类有的方法、子类没有(为延用)、父类有的方法子类也有(方法重写)
		// 2、选择流 (因为要使用新增方法(父类没有的方法子类有),所以不能发生多态)
		ByteArrayOutputStream baos = null;
		try {
			baos = new ByteArrayOutputStream();
			// 3、操作(写出)
			String msg = "show me the code";
			byte[] datas = msg.getBytes();// 字符串-->字节数组(编码)
			baos.write(datas, 0, datas.length);
			baos.flush();
			// 获取数据
			dest = baos.toByteArray();
			System.out.println(dest.length+"-->"+new String(dest,0,baos.size()));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (null != baos) {
					baos.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

注意:

新增方法:父类没有的方法子类有

能够使用多态的两种:父类有的方法子类没有(为延用)、父类有的方法子类也有(方法重写,子类进行实现)

选择流 (因为要使用新增方法(父类没有的方法子类有),所以不能发生多态)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Flask接口如何返回JSON格式数据自动解析

    Flask接口如何返回JSON格式数据自动解析

    这篇文章主要介绍了Flask接口如何返回JSON格式数据自动解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • springboot集成JWT实现身份认证(权鉴)的方法步骤

    springboot集成JWT实现身份认证(权鉴)的方法步骤

    本文主要介绍了springboot集成JWT实现身份认证(权鉴)的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • SpringBoot开发技巧之如何处理跨域请求CORS

    SpringBoot开发技巧之如何处理跨域请求CORS

    CORS(Cross-Origin Resource Sharing)"跨域资源共享",是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制
    2021-10-10
  • SpringBoot整合Mybatis-plus案例及用法实例

    SpringBoot整合Mybatis-plus案例及用法实例

    mybatis-plus是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于SpringBoot整合Mybatis-plus案例及用法实例的相关资料,需要的朋友可以参考下
    2022-11-11
  • Java实现用位运算维护状态码

    Java实现用位运算维护状态码

    位运算是一种非常高效的运算方式,在算法考察中比较常见,那么业务代码中我们如何使用位运算呢,感兴趣的小伙伴快跟随小编一起学习一下吧
    2024-03-03
  • SpringCloud gateway+zookeeper实现网关路由的详细搭建

    SpringCloud gateway+zookeeper实现网关路由的详细搭建

    这篇文章主要介绍了SpringCloud gateway+zookeeper实现网关路由,本文通过图文实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 基于html5+java实现大文件上传实例代码

    基于html5+java实现大文件上传实例代码

    本文通过一段实例代码给大家介绍基于html5+java实现大文件上传,涉及到html5 java 文件上传相关知识,感兴趣的朋友一起学习吧
    2016-01-01
  • 一篇文章带你详解Spring的概述

    一篇文章带你详解Spring的概述

    这篇文章主要为大家介绍了Spring的概述,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Idea中Java项目如何修改项目名

    Idea中Java项目如何修改项目名

    这篇文章主要介绍了Idea中Java项目如何修改项目名问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • java异步写日志到文件中实现代码

    java异步写日志到文件中实现代码

    这篇文章主要介绍了java异步写日志到文件中实现代码的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论