文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ByteArrayOutputStream与InputStream互相转换方式

2024-04-02 19:55

关注

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代码示例



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代码示例



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();
			}
		}
	}
}

注意:

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

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯