从内存输入

1.从内存输入

package com.zachary.io;

import java.io.IOException;
import java.io.StringReader;

/**
 * 从内存输入
 * @author Zachary.Zheng
 * @version 1.0
 * @date 2019年11月10日
 */
public class MemoryInput {
    /**
     * BufferedInputFile.read()读入的String结果被用来创建一个StringReader
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        StringReader in = new StringReader(BufferedInputFile.read("src/com/zachary/io/MemoryInput.java"));
        int c;
        while ((c = in.read()) != -1) {
            // read()是以int形式返回下一个字节, 因此必须转型为char才能正确打印.
            System.out.println((char)c);
        }
    }
}

2.格式化的内存输入,谨慎使用

package com.zachary.io;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;

/**
 * 格式化的内存输入
 * 谨慎使用
 * @author Zachary.Zheng
 * @version 1.0
 * @date 2019年11月10日
 */
public class FormattedMemoryInput {
    /**
     * 要读取格式化数据, 可以使用DataInputStream, 它是一个面向字节的I/O类(不是面向字符-中文乱码)
     * 1. 编码为'GBK'和'UTF-8'都没有效果
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        DataInputStream in = new DataInputStream(
                new ByteArrayInputStream(
                        BufferedInputFile.read("src/com/zachary/io/FormattedMemoryInput.java").getBytes("GBK")
                        )
                );
        try {
            while(true) {
                System.out.println((char)in.readByte());
            }
        } catch (Exception e) {
            // 可以捕获异常来检测输入的末尾. 但这是对异常错误的使用
            System.out.println("End of stream");
        }
        
        in = new DataInputStream(
                new ByteArrayInputStream(
                        BufferedInputFile.read("src/com/zachary/io/FormattedMemoryInput.java").getBytes("UTF-8")
                        )
                );
        /*
         * available() 方法查看还有多少可供存取的字符
         * 1. 字面意思"在没有阻塞的情况下所能读取的字节数"
         * 2. 工作方式会根据所读的媒介类型的不同而有所不同
         * 3. 对与文件, 这意味这整个文件
         * 4. 但对于不同类型的流可能不是这样的, 因此要谨慎使用
         */
        while(in.available() != 0) {
            System.out.println((char)in.readByte());
        }
    }
}

 

posted @ 2019-11-10 21:53  心若朝阳何惧悲伤,你若精彩天自安排  阅读(170)  评论(0编辑  收藏  举报