• Java IO(3)


    字符流相关

    字符流基本上可以类比字节流 只不过是将字节流的byte 换为char。

    最根本的两个类是Reader以及Writer

    Reader的子类有:
    BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader

    Writer的子类有:

    BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter

    特殊的类:

    InputStreamReader以及OutputStreamWriter 通过这两个类可以实现字节流与字符流之间的转化,前提是本身读入的是字符串。

    将字节流转化为字符流

    public InputStreamReader(InputStream in)

    利用指定的编码格式cs 将字节流转化为字符流

    InputStreamReader(InputStream in, Charset cs)

    OutputStreamWriter的使用也是类似的方式

    例子:

    
    

    package com.characterStream.bufferWriter;

    
    

    import java.io.*;

    
    

    public class streamTest {

    
    

    public static void main(String[] args) throws Exception {

    
    

    FileOutputStream fos=new FileOutputStream("F:\filetest.txt");

    
    

    //这里将字节流转化为字符流

    
    

    OutputStreamWriter osw=new OutputStreamWriter(fos);

    
    

    //这里是字节流的过滤流

    
    

    BufferedWriter bw=new BufferedWriter(osw);

    
    

    bw.write("the test of BufferedStream");

    
    

    bw.write(' ');

    
    

    bw.write("test is finished");

    
    

    //用字符流的时候这里的close就变得更加关键了

    
    

    //只有close的时候 才会将bufferedwriter中的内容写入到文件中

    
    

    //否则的话 文件中是没有什么实际内容的

    
    

    bw.close();

    
    

    //再通过字符流从外部读入

    
    

    FileReader fr=new FileReader("F:\filetest.txt");

    
    

    BufferedReader br=new BufferedReader(fr);

    
    

    //这个是每次读入一行数据

    
    

    String str;

    
    

    while((str=br.readLine())!=null){

    
    

    System.out.println(str);

    
    

    }

    
    

    br.close();

    
    

    //将标准输入设备包装成为字节流 每次在控制体上输入的信息又会再次打印出来

    
    

    InputStreamReader isr=new InputStreamReader(System.in);

    
    

    BufferedReader bfr=new BufferedReader(isr);

    
    

    //注意这种输入流的通用的格式 读到最后一行的话 就会出来一个 null 表示已经//到了最后一行

    
    

    while((str=bfr.readLine())!=null){

    
    

    System.out.println(str);

    
    

    }

    
    

    bfr.close();

    
    

    }

    
    

    }

     

    注意字符流中由于缓冲区的使用,只有在close的时候才会将字符流中的内容读进来或者读出去,加上close是非常关键的。

    关于包装模式在IO中的应用

    之前也看到了具体的IO过滤流的一些典型的写法 比如:

    DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\filetest.txt")));

    但是为什么能这样写,就是说为什么能写成这么一种嵌套的模式,这就要涉及到Java的设计模式,这里面应用到的就是包装模式具体见:

    http://www.cnblogs.com/Goden/p/3901664.html

  • 相关阅读:
    Markdown编辑器语法指南2
    python文件读写的学习
    K:图相关的最小生成树(MST)
    K:哈弗曼树
    K:树、二叉树与森林之间的转换及其相关代码实现
    K:二叉树
    K:树与二叉树
    KandQ:那年,那树,那些知识点
    K:java中的安全模型(沙箱机制)
    K:java中的RMI(Remote Method Invocation)
  • 原文地址:https://www.cnblogs.com/Goden/p/3903022.html
Copyright © 2020-2023  润新知