从内存输入
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()); } } }