热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

内存流——​ByteArrayOutputStream,ByteArrayInputStream,CharArrayReader,CharArrayWriter

1、什么是内存流​当输出流的目的,和输入流的源是内存时,这样的流称之为内存流。​ByteArrayOutputStream:内存流的输出流​ByteAr

1、 什么是内存流


​ 当输出流的目的,和输入流的源是内存时,这样的流称之为内存流。

​ ByteArrayOutputStream:内存流的输出流

​ ByteArrayInputStream:内存流的输入流,它是唯一一种能够直接从网络上获取二进制数据的流

​ CharArrayReader:内存流中的输入流

​ CharArrayWriter:内存流中的输出流

​ ByteArrayInputStream主要完成将内容从内存读入程序之中,而ByteArrayOutputStream的功能主要是将数据写入到内存中。


2、内存流构造方法


ByteArrayInputStream是输入流的一种实现,它有两个构造函数,每个构造函数都需要一个字节数组来作为其数据源:

ByteArrayInputStream(byte[] buf)

ByteArrayInputStream(byte[] buf,int offse , int length)

​ ByteArrayOutputStream是输出流的一种实现,它有两个构造函数:

ByteArrayOutputStream():内存中分配了一个字节数组。

BuyteArrayoutputStream(int):创建一个新的 byte 数组输出流,它具有指定大小的缓冲区容量(以字节为单位)


1.3 写数据到内存流和从内存流读数据


​ 如果程序在运行过程中要产生一些临时文件,可以采用虚拟文件方式实现(其实是一段内存),JDK中提供了ByteArrayInputStream和ByteArrayOutputStream两个类可实现类似于内存虚拟文件的功能。


通过内存流写数据: 

import java.io.ByteArrayOutputStream;
import java.io.IOException;public class Test {public static void writeByteArray(String msg) {ByteArrayOutputStream baos = null;try {baos = new ByteArrayOutputStream();baos.write(msg.getBytes());baos.flush();// 1.通过toString()得到缓冲区数据// System.out.println(baos.toString());// 2.通过toByteArray()方法得到一个byte数组byte[] b = baos.toByteArray();String str = new String(b);System.out.println("str:" + str);} catch (IOException e) {e.printStackTrace();} finally {try {if (baos != null) {baos.close();}} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {String msg = "hello world";Test.writeByteArray(msg);}
}

通过内存流读取数据:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;public class Test {public static void readByteArray(String msg) {ByteArrayOutputStream baos = null;ByteArrayInputStream bais = null;try {baos = new ByteArrayOutputStream();baos.write(msg.getBytes());baos.flush();bais = new ByteArrayInputStream(baos.toByteArray());byte[] b = new byte[1024];int len = bais.read(b);System.out.println("len:" + len);String str = new String(b, 0, len);System.out.println("str:" + str);} catch (IOException e) {e.printStackTrace();} finally {try {if (baos != null) {baos.close();}} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {String msg = "hello world";readByteArray(msg);}
}

 


推荐阅读
  • 在Effective Java第三版中,建议在方法返回类型中优先考虑使用Collection而非Stream,以提高代码的灵活性和兼容性。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 每种编程语言都有其独特的完成任务的方式,这也说明了为什么有这么多语言可供选择。在JimHall的《不同的编程语言如何完成相同的事情》文章中,他演示了13种不同的语言如何使用不同的语 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • C# 中创建和执行存储过程的方法
    本文详细介绍了如何使用 C# 创建和调用 SQL Server 存储过程,包括连接数据库、定义命令类型、设置参数等步骤。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 本文将详细介绍如何使用Java编程语言生成指定数量的不重复随机数,包括具体的实现方法和代码示例。适合初学者和有一定基础的开发者参考。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
author-avatar
IQBB_LongGang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有