ByteArrayOutputStream与InputStream互相转换方式

目录
  • ByteArrayOutputStream与InputStream互相转换
    • InputStream 转为 ByteArrayOutputStream
    • ByteArrayOutputStream 转为 InputStream
  • Java字节数组流(ByteArrayInputStream和ByteArrayOutputStream)
    • ByteArrayInputStream代码示例
    • ByteArrayOutputStream代码示例

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

注意:

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

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

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

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

(0)

相关推荐

  • 使用ByteArrayOutputStream写入字符串方式

    目录 使用ByteArrayOutputStream写入字符串 文件与二进制数据互转-ByteArrayOutputStream 使用ByteArrayOutputStream写入字符串 package com.gk; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import jav

  • 使用ServletInputStream在拦截器或过滤器中应用后重写

    目录 ServletInputStream在拦截器或过滤器应用后重写 在拦截器种使用了request.getInputStream()或者getReader() 问题描述 原因分析 如何处理 ServletInputStream在拦截器或过滤器应用后重写 ServletInputStream inputStream = super.getInputStream(); StringBuilder sb = new StringBuilder(); BufferedReader reader = n

  • Java基础知识之ByteArrayOutputStream流的使用

    目录 Java ByteArrayOutputStream流的使用 一.ByteArrayOutputStream流定义 二.ByteArrayOutputStream流实例域 三.ByteArrayOutputStream流构造函数 四.ByteArrayOutputStream流方法 五.ByteArrayOutputStream流的作用 ByteArrayOutputStream 理解 ByteArrayOutputStream的用法 ByteArrayInputStream的用法 Jav

  • Java实现InputStream的任意拷贝方式

    Java InputStream的任意拷贝 有时候,当我们需要多次使用到同一个InputStream的时候如何实现InputStream的拷贝使用 我们可以把InputStream首先转换成ByteArrayOutputStream.然后你就可以任意克隆你需要的InputStream了 代码如下: ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; w

  • 使用ByteArrayOutputStream实现将数据写入本地文件

    目录 ByteArrayOutputStream将数据写入本地文件 那来了解一下ByteArrayOutPutStream吧 在表格输出时 FileOutputStream的写入方法 把读取的结果写入到ByteArrayOutputStream ByteArrayOutputStream将数据写入本地文件 在一个项目中做一次性校验部分,需要将校验后数据写入表格后上传.巧的是,服务器Down了.作为一个新手实习生菜鸟,为了测试自己的代码和输出结果有没有毛病,在大神同事的指点下选择了先将表格输出到本

  • java基础知识之FileInputStream流的使用

    目录 一.File流概念 二.FileInputStream 1)FileInputStream概念 2)构造方法 3)FileInputStream常用API 三.三种read方法效率比较 一.File流概念 JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流 二.FileInputStream 1)FileInputStream概念 FileInputStream

  • ByteArrayOutputStream与InputStream互相转换方式

    目录 ByteArrayOutputStream与InputStream互相转换 InputStream 转为 ByteArrayOutputStream ByteArrayOutputStream 转为 InputStream Java字节数组流(ByteArrayInputStream和ByteArrayOutputStream) ByteArrayInputStream代码示例 ByteArrayOutputStream代码示例 ByteArrayOutputStream与InputStr

  • Json对象与Json字符串互转(4种转换方式)

    1>jQuery插件支持的转换方式: 复制代码 代码如下: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2>浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: 复制代码 代码如下: JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换

  • Java 大小写最快转换方式实例代码

    Java 大小写最快转换方式实例代码          这里直接给出实现代码,在代码中注释都很清楚,不多做介绍. Java代码 package io.mycat; import java.util.stream.IntStream; /** * 小写字母的 'a'=97 大写字母 A=65 更好相差32利用这个差进行大小写转换 * @author : Hpgary * @date : 2017年5月3日 10:26:26 * @mail: hpgary@qq.com * */ public cl

  • C++学习小结之数据类型及转换方式

    一.输入输出语句 Console.ReadLine(); 会等待直到用户按下回车,一次读入一行 Console.ReadKey(); 则是等待用户按下任意键,一次读入一个字符. 二.数据类型 主要掌握: 1.值类型:int 整型,float 浮点型(单精度), double 双精度,char 字符型,bool 布尔型(两种状态true与false),datetime  日期时间 2.引用类型:string 字符串类型 问题? a.字符串与字符的区别:string类型使用 "",char

  • CentOS下使用LibreOffice实现文档格式的转换方式

    项目需求,对上传的文档进行一些预处理,如果用户上传了doc格式的文档,需要将其处理为docx或者pdf格式,以便后续的流程对文档内容进行提取. 先是试了一下phpoffice/phpword这个包,发现其对doc的转换很不理想,这个包更适合用来根据内容生成文档,而不是转换文档,不是太适合我这种需求. 然后发现了LibreOffice这个开源工具,经过使用,效果很好,分享一下. 服务器是CentOS7,直接使用yum安装LibreOffice,大概需要600MB+ 的磁盘空间: # 装之前可以先删

  • go语言中int和byte转换方式

    主机字节序 主机字节序模式有两种,大端数据模式和小端数据模式,在网络编程中应注意这两者的区别,以保证数据处理的正确性:例如网络的数据是以大端数据模式进行交互,而我们的主机大多数以小端模式处理,如果不转换,数据会混乱 参考 :一般来说,两个主机在网络通信需要经过如下转换过程:主机字节序 -> 网络字节序 -> 主机字节序 大端小端区别 大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 低地址 --------------------> 高地址 高

  • Python基本类型的连接组合和互相转换方式(13种)

    本篇总结了一下字符串,列表,字典,元组的连接组合使用和类型的互相转换小例子,尤其列表中的extend()方法和字典中的 update方法非常的常用. 1.连接两个字符串 a = "hello " b = "world" a += b print(a) # hello world 2.字典的连接 dict1 = {1: "a", 2: "b"} dict2 = {3: "c", 4: "d"

  • Pandas时间序列:重采样及频率转换方式

    如下所示: import pandas as pd import numpy as np 一.介绍 重采样(resampling)指的是将时间序列从一个频率转换到另一个频率的处理过程: 将高频率(间隔短)数据聚合到低频率(间隔长)称为降采样(downsampling): 将低频率数据转换到高频率则称为升采样(unsampling): 有些采样即不是降采样也不是升采样,例如将W-WED(每周三)转换为W-FRI: 二.resample方法–转换频率的主力函数 rng = pd.date_range

  • Pandas —— resample()重采样和asfreq()频度转换方式

    resample() resample()进行重采样. 重采样(Resampling)指的是把时间序列的频度变为另一个频度的过程.把高频度的数据变为低频度叫做降采样(downsampling),把低频度变为高频度叫做增采样(upsampling). 降采样 考虑因素: 各区间哪边是闭合的(参数:closed) 如何标记各聚合面元,用区间的开头还是末尾(参数:label) In [232]: ts_index = pd.date_range('2018-08-03',periods =12,fre

  • new_zeros() pytorch版本的转换方式

    如下所示: logprobs.new_zeros(logprobs.size()) pytorch 0.4版本中用到的 新建一个与logprobs类型相同的Variable 转换为pytorch0.2等版本 logprobs.new(logprobs.size()).zero_() 以上这篇new_zeros() pytorch版本的转换方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐