字符流相关

字符流基本上可以类比字节流 只不过是将字节流的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. Neo4j 不区分大小写的模糊查询匹配

    问题:当图数据库中存储的节点的名字为英文时,就会遇到大小写不匹配问题. 使用不区分大小写的正则表示式可以解决以上问题. Cpyher的where语法里支持正则表达式 ,其语法为 :   =~ &quo ...

  2. Flutter 实际开发常用工具类(全局提示,请求封装,token缓存,验证码倒计时、常用窗帘动画及布局)

    介绍: 一星期从入门到实际开发经验分享及总结           代码传送门github Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.未来App开发 ...

  3. a标签实现下载canvas图片

    令 a 的 href = canvas.toDataURL("image/png");

  4. pg_dumpall - 抽出一个 PostgreSQL 数据库集群到脚本文件中

    SYNOPSIS pg_dumpall [ option...] DESCRIPTION 描述 pg_dumpall 是一个用于写出("转储")一个数据库集群里的所有 Postgr ...

  5. Sql Server 显示插入Identity字段

    先像下面这样写 SET IDENTITY_INSERT [表名] ON   ...INSERT INTO ...   别忘了在插入完数据后再执行下面的语句 SET IDENTITY_INSERT [表 ...

  6. CentOS 7系统安装nginx+php

    安装介绍1.系统环境CentOS7 2.nginx版本1.12 3.PHP版本7.2 下载地址 4.MySQL版本5.7 安装nginx添加centos7的 nginx yum源 然后执行安装 sud ...

  7. [NOI1999]生日蛋糕(搜索)

    [NOI1999]生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半 ...

  8. [USACO07DEC]Sightseeing Cows(负环,0/1分数规划)

    [USACO07DEC]Sightseeing Cows Description Farmer John has decided to reward his cows for their hard w ...

  9. tf.nn.top_k

    评估操作对于测量神经网络的性能是有用的. 由于它们是不可微分的,所以它们通常只是被用在评估阶段 tf.nn.top_k(input, k, name=None) 这个函数的作用是返回 input 中每 ...

  10. Oracle 11g 详细安装步骤

    一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地址: http://www.ora ...