Java中内存数据流的使用

内存流存在的意义:

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

内存流的使用场景:

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

    }

}

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


Reprint please specify: Blog4Jun Java中内存数据流的使用

Previous
Apollo配置中心和SpringCloud中Zuul结合使用创建配置网关 Apollo配置中心和SpringCloud中Zuul结合使用创建配置网关
当配置中心要求高可用的时候,集群是一种不错的解决办法。当配置中心进行集群的时候,Zuul就派上了用场。并且Apollo和SpringCloud中zuul结合非常的方便,此处只解释在结合网关中路由刷新的部分原理: 前提:在Apollo的P
2019-01-03
Next
springboot中使用@Value读取配置文件,通过静态变量实现非侵入式集中管理 springboot中使用@Value读取配置文件,通过静态变量实现非侵入式集中管理
在SpringBoot中读取XXX.properties等配置文件有许多方法,常见的方法有:@ConfigurationProperties方式、使用@Value注解方式、使用Environment、以及使用PropertiesLoader
2018-12-19