字符流相关

字符流基本上可以类比字节流 只不过是将字节流的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('\n');


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

Java IO(3)的更多相关文章

  1. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  2. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  3. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  4. java Io流向指定文件输入内容

    package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String ...

  5. java Io文件输入输出流 复制文件

    package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...

  6. java Io流更新文件内容

    package com.hp.io; import java.io.FileOutputStream; import java.io.IOException; public class FileOut ...

  7. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  8. java.io.NotSerializableException: test.io.file.Student

    java.io.NotSerializableException: test.io.file.Student    at java.io.ObjectOutputStream.writeObject0 ...

  9. java.io.IOException: mark/reset not supported

    java.io.IOException: mark/reset not supported at java.io.InputStream.reset(InputStream.java:348) at ...

  10. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

随机推荐

  1. Codeforces - 1198D - Rectangle Painting 1 - dp

    https://codeforces.com/contest/1198/problem/D 原来是dp的思路,而且是每次切成两半向下递归.好像在哪里见过类似的,貌似是紫书的样子. 再想想好像就很显然的 ...

  2. Html5移动端页面自适应布局详解(rem布局)

    在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport,通读网上的各种对于viewport的解释之后 大概viewport可以理解为三种 1.layout viewport  ...

  3. 什么是Azkaban?

    Azkaban是什么 Azkaban是由Linkedin开源的做批量工作流任务的调度器.在一个工作流内按照特定的顺序运行一组工作和流程.Azkaban定义了一种KV文件格式来建立任务之间的相互依赖关系 ...

  4. HTTP RESTful服务开发 spring boot+Maven +Swagger

    这周配合第三方平台整合系统,需要提供HTTP REST服务和使用ActiveMQ推送消息,研究了下,做个笔记. 1.使用eclipse创建Spring Boot项目  创建Spring Boot项目( ...

  5. 随笔2 AbstractMap<K,V>

    上一篇写了Map接口的源码分析,这一篇写一下Map接口的一个实现类AbstractMap,从名字就可以看出这是一个抽象类,提供了Map接口的骨架实现,为我们实现Map接口的时候提供了很大的便利.在这里 ...

  6. sysbench github & manual

    sysbench github https://github.com/akopytov/sysbench sysbench-manual.pdf https://github.com/mrivandu ...

  7. (NOIP)CSP-S 2019前计划

    前言 无 1.NOIP原题板刷 NOIP原题板刷 这是一篇咕了的blog 2.牛客 & ACwing & 洛谷 网课学习 收获还是蛮大的,不过我没有写博客 3.codeforces专项 ...

  8. python中*args和**kwargs学习

    *args 和 **kwargs 经常看到,但是一脸懵逼 ,今天终于有收获了 """ python 函数的入参经常能看到这样一种情况 *args 或者是 **kwargs ...

  9. DOSUtil

    package Testlink; import java.io.BufferedReader; import java.io.File; import java.io.IOException; im ...

  10. 【Java】Java中charAt()方法的使用

    说明 java.lang.String.charAt() 方法返回指定索引处的char值.索引范围是从0到length() - 1.对于数组索引,序列的第一个char值是在索引为0,索引1,依此类推 ...