博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java IO(3)
阅读量:7052 次
发布时间:2019-06-28

本文共 1835 字,大约阅读时间需要 6 分钟。

字符流相关

字符流基本上可以类比字节流 只不过是将字节流的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的设计模式,这里面应用到的就是包装模式具体见:

转载于:https://www.cnblogs.com/Goden/p/3903022.html

你可能感兴趣的文章
VS2015 C#6.0 中的那些新特性(转自http://www.cnblogs.com/henryzhu/p/new-feature-in-csharp-6.html)...
查看>>
魔法森林[NOI2014]
查看>>
bzoj4002[JLOI2015]有意义的字符串
查看>>
python爬虫-抓取acg12动漫壁纸排行设置为桌面壁纸
查看>>
用QQ传dll文件,你可能会遇到灵异事件
查看>>
hbase meta表的结构
查看>>
2017-2-10
查看>>
Git
查看>>
centos7.4 安装后的基本设置
查看>>
SQLCipher 配置
查看>>
函数的定义、作用域、函数递归
查看>>
纯手工 css+html 简易三级导航栏(横向)
查看>>
个人码风
查看>>
基于昨天调代码的收获
查看>>
iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
查看>>
QT编写TCP的问题
查看>>
poj1456 结构体排序+贪心
查看>>
javascript 乘法口诀表
查看>>
views 视图函数
查看>>
MySql详解(一)
查看>>