Java中内存数据流的使用

本文深入探讨了内存流在数据中转中的应用,特别是在无需持久化存储的场景下,如何利用内存流提高数据处理效率。通过具体实现类如ByteArrayInputStream、ByteArrayOutputStream、CharArrayReader和CharArrayWriter的实例演示,展示了内存流在代码间数据交换的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存流存在的意义:

    当我们不需要持久化存储数据,而仅仅是需要进行数据中转的时候,就可以使用内存流。

内存流的使用场景:

		 1.代码中需要交换的数据,读写的数据,仅仅是代码之间需要交换,就没必要
	内存 ==》 磁盘   磁盘 ==》内存 【可以在内存读写上提高了效率】
	
	     2.好处:提高了读写的效率,即数据处理的效率 。

内存流的具体实现类:

ByteArrayInputStreamByteArrayInputStream extends InputStream,包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。

*ByteArrayOutputStreamByteArrayOutputStream extends OutputStream, 此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。

CharArrayReader: CharArrayReader extends Reader,此类实现一个可用作字符输入流的字符缓冲区。

CharArrayWriterCharArrayWriter extends Writer,此类实现一个可用作 Writer 的字符缓冲区。缓冲区会随向流中写入数据而自动增长。可使用 toCharArray() 和 toString() 获取数据。

测试代码:
StrRes.java

package com.icerno.cloud.model;
/**
 * 
* Copyright: Copyright (c) 2018 Jun_Zhou
* 
* @ClassName: StrRes.java
* @Description: 字符串数据源;
* 
* @version: v1.0.0
* @author: JunZhou
* @Email: 1769676159@qq.com
* @Site: CERNO
* @date: 2018年12月28日 上午11:30:54
 */
public class StrRes
{
	public static String resStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + 
			"<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\r\n" + 
			"	xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + 
			"	xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\r\n" + 
			"	<modelVersion>4.0.0</modelVersion>\r\n" + 
			"	<parent>\r\n" + 
			"		<groupId>org.springframework.boot</groupId>\r\n" + 
			"		<artifactId>spring-boot-starter-parent</artifactId>\r\n" + 
			"		<version>2.1.1.RELEASE</version>\r\n" + 
			"		<relativePath /> <!-- lookup parent from repository -->\r\n" + 
			"	</parent>\r\n" + 
			"	<groupId>com.icerno</groupId>\r\n" + 
			"	<artifactId>SpringCloudUtils</artifactId>\r\n" + 
			"	<version>0.0.1-SNAPSHOT</version>\r\n" + 
			"	<name>SpringCloudUtils</name>\r\n" + 
			"	<description>Utils for Spring Cloud</description>\r\n" + 
			"\r\n" + 
			"	<properties>\r\n" + 
			"		<java.version>1.8</java.version>\r\n" + 
			"	</properties>\r\n" + 
			"\r\n" + 
			"	<dependencies>\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>org.springframework.boot</groupId>\r\n" + 
			"			<artifactId>spring-boot-starter-web</artifactId>\r\n" + 
			"		</dependency>\r\n" + 
			"\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>org.springframework.boot</groupId>\r\n" + 
			"			<artifactId>spring-boot-starter-test</artifactId>\r\n" + 
			"			<scope>test</scope>\r\n" + 
			"		</dependency>\r\n" + 
			"\r\n" + 
			"		<!-- jgit相关的依赖 -->\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>org.eclipse.jgit</groupId>\r\n" + 
			"			<artifactId>org.eclipse.jgit</artifactId>\r\n" + 
			"			<version>4.8.0.201706111038-r</version><!--$NO-MVN-MAN-VER$ -->\r\n" + 
			"		</dependency>\r\n" + 
			"		<!-- gitLab4j相关的依赖 -->\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>org.gitlab4j</groupId>\r\n" + 
			"			<artifactId>gitlab4j-api</artifactId>\r\n" + 
			"			<version>4.8.7</version>\r\n" + 
			"		</dependency>\r\n" + 
			"		<!-- HuTool相关的依赖 -->\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>cn.hutool</groupId>\r\n" + 
			"			<artifactId>hutool-all</artifactId>\r\n" + 
			"			<version>4.1.19</version>\r\n" + 
			"		</dependency>\r\n" + 
			"		<!-- Json-Web——Token相关的依赖 -->\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>io.jsonwebtoken</groupId>\r\n" + 
			"			<artifactId>jjwt</artifactId>\r\n" + 
			"			<version>0.7.0</version>\r\n" + 
			"		</dependency>\r\n" + 
			"		<!-- 文本比较的工具类 -->\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>com.googlecode.java-diff-utils</groupId>\r\n" + 
			"			<artifactId>diffutils</artifactId>\r\n" + 
			"			<version>1.2.1</version>\r\n" + 
			"		</dependency>\r\n" + 
			"		<!-- https://mvnrepository.com/artifact/org.apache.directory.studio/org.apache.commons.io -->\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>org.apache.directory.studio</groupId>\r\n" + 
			"			<artifactId>org.apache.commons.io</artifactId>\r\n" + 
			"			<version>2.4</version>\r\n" + 
			"		</dependency>\r\n" + 
			"		<!-- \r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>com.googlecode.java-diff-utils</groupId>\r\n" + 
			"			<artifactId>diffutils</artifactId>\r\n" + 
			"			<version>1.3.0</version>\r\n" + 
			"		</dependency> -->\r\n" + 
			"		<!-- 工具类 -->\r\n" + 
			"		<dependency>\r\n" + 
			"			<groupId>lz.cloud</groupId>\r\n" + 
			"			<artifactId>lz-common-tools</artifactId>\r\n" + 
			"			<version>1.0.0</version>\r\n" + 
			"			<exclusions>\r\n" + 
			"				<exclusion>\r\n" + 
			"					<groupId>QRCode</groupId>\r\n" + 
			"					<artifactId>QRCode</artifactId>\r\n" + 
			"				</exclusion>\r\n" + 
			"				<exclusion>\r\n" + 
			"					<groupId>javax.mail</groupId>\r\n" + 
			"					<artifactId>mail</artifactId>\r\n" + 
			"				</exclusion>\r\n" + 
			"				<exclusion>\r\n" + 
			"					<groupId>org.apache.poi</groupId>\r\n" + 
			"					<artifactId>poi</artifactId>\r\n" + 
			"				</exclusion>\r\n" + 
			"				<exclusion>\r\n" + 
			"					<groupId>org.apache.poi</groupId>\r\n" + 
			"					<artifactId>poi-ooxml</artifactId>\r\n" + 
			"				</exclusion>\r\n" + 
			"			</exclusions>\r\n" + 
			"		</dependency>\r\n" + 
			"	</dependencies>\r\n" + 
			"\r\n" + 
			"	<build>\r\n" + 
			"		<plugins>\r\n" + 
			"			<plugin>\r\n" + 
			"				<groupId>org.springframework.boot</groupId>\r\n" + 
			"				<artifactId>spring-boot-maven-plugin</artifactId>\r\n" + 
			"			</plugin>\r\n" + 
			"		</plugins>\r\n" + 
			"	</build>\r\n" + 
			"\r\n" + 
			"</project>\r\n" + 
			"";
}

MemoryStreamDemo.java

package com.icerno.cloud.test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.LineNumberReader;

import com.icerno.cloud.model.StrRes;


/**
 Copyright: Copyright (c) 2018 Jun_Zhou
 @ClassName: MemoryStreamDemo.java
 @Description: 该类的功能描述
 @version: v1.0.0
 @author: JunZhou
 @Email: 1769676159@qq.com
 @Site: CERNO
 @date: 2018年12月29日 下午8:53:20 
*/
public class MemoryStreamDemo
{
	
	public static void main(String[] args) throws IOException
	{
		//内存字节流=====================================================================
		ByteArrayOutputStream baos = new ByteArrayOutputStream();//不需要路径,写入内存,跟磁盘无需关联
		
		baos.write("这是要写入内存流的数据".getBytes());//将字符串变成字节数组,写入内存
		baos.close();//此处关闭内存流无效 下面的数据也可写入
		baos.write("helloworld".getBytes());//注意:之前的IO流都是跟磁盘文件建立了连接,需要关闭连接即关闭流! 而关闭内存流跟连接无关
		
		byte[] byteArray = baos.toByteArray();//获取内存中存数据的数组
		
		//使用内存输入流 读取获得内存中的保存数据的数组
		ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);//ByteArrayInputStream(byte[] buf):创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
		
		//读
		int len;
		byte[] b = new byte[1024];
		while ((len = bais.read(b)) != -1)
		{
			System.out.println(new String(b, 0, len));
		}
		
		//内存字符流============================================================================
		CharArrayWriter caw = new CharArrayWriter();
		caw.write(StrRes.resStr);
		
		char[] ch = caw.toCharArray();
		
		//使用内存输入流 读取获得内存中的保存数据的数组
		CharArrayReader car = new CharArrayReader(ch);
		//读
		int len2;
		char[] c = new char[10];
		while ((len2 = car.read(c)) != -1)
		{
			System.out.print(new String(c, 0, len2));
		}
		
		//因为CharArrayReader extends Reader 因此可以很方便的将其转化为LineNumberReader、BufferedReader;
		LineNumberReader propFileBr = new LineNumberReader(car);
		String lineProp = null;
		while ((lineProp = propFileBr.readLine()) != null)
		{
			
			String propKeyValuePair = lineProp.trim();
			System.out.println(propFileBr.getLineNumber() + "------\t" + propKeyValuePair + "\t------");
		}
		
	}
	
}

执行结果如下所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值