一、概念

Reader

Reader用于读取的字符流抽象类,数据单位为字符。

int read(): 读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode值)。如果未读出字符则返回-1(返回值为-1表示读取结束)。

void close() : 关闭流对象,释放相关系统资源。

 /*字符输入流 Reader  仅用于字符(不算管中文还是英文)文件,不适合图片等
*字节流 FileInputStream 对应 字符流 FileReader
*字节流 FileOutputStream 对应字符流 FileWriter
* 字节流:图片 音乐 电影 文字 优先选用
* 字符流好处可以对中文字符进行有效处理,要处理中文是优先选字符流
1)字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元(2个字节)。
2)字节流默认不使用缓冲区;字符流使用缓冲区。
3)字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;
字符流通常处理文本数据,它支持写入及读取Unicode码元。
4)底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。
字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,为向IO设备写入或读取字符串提供了一点点方便。 跟字节流差不多,但是这里的每一滴水是一个占16位的字符(char型变量是2个字节,16位的) FileReader与字节流FileInputStream相似的方法
int read() 从字节流/字符流中读取单个字符,返回所读取的字节/字符数据
int read(type[] b/char c) 借助数组,从输入流中最多读取b.length()个字节或c.length()个字符的数据,将其存在字节数组b/
字符数组c ,返回实际读取的字节/字符数
int read(type[] b/char c,int off,int len) 从字节/字符流中最多读取len个字节或字符的数据,将它们存在字节数组b/字符数组c
中,但不是从数组下标0开始的而是从数组下标off位置开始存储,存储长度为len
*/
package cn.sxt.test; import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader; public class Test_0330_Reader {
public static void main(String[] args) throws IOException {
//1、获取源文件
File file=new File("src.txt");
//2、选择流
Reader reader=new FileReader(file); //整合第一步和第二步更加简单
//FileReader reader2=new FileReader("src.txt"); //3、进行操作 char:字符型16位占2个字节
char datas[]=new char[30];//开辟字符数组,接收读取的数据 //Reader类的read()方法:返回类型为int,作为整数读取的字符(占两个字节共16位)范围在 (0-65535),若已到流的末尾,返回 -1
//read()方法会将读取到的数据保存到开辟好的char型数组中,然后返回读取的字符长度,由于开辟的数组很大,内容无法全部填充
//在输出时将部分字符数组转换成字符串后输出。
int len=reader.read(datas,0,datas.length); //开始 取水滴,每个水滴是一个字符
for (int i=0;i<datas.length ;i++) {
System.out.printf("datas[%d]=%c;"+"\n",i,datas[i]);
} String msg=new String(datas,0,len);//字符转字符串输出,和字节输出时一样的
System.out.println(msg); //4、关闭流文件
reader.close(); } }

· Writer

Writer用于写入的字符流抽象类,数据单位为字符。

void write(int n): 向输出流中写入一个字符。

void close() : 关闭输出流对象,释放相关系统资源。

 /*
*输出字符流 Writer
*字节流 FileOutputStream 对应字符流 FileWriter
*二者共同类似的方法
*
*void write(int c); 将指定的字节/字符输出到输出流中 其中c在字节流中代指字节 在字符流中代指字符
*void write(byte[]/char[] buf) 借助字节/字符数组完成输出
*void write(byte[]/char[] buf,int off,int len) 将字节/字符数组buf从off位置开始长度为len的字节/字符输出到输出流中
*
*字符流直接以字符为操作单位,所以Writer相对于字节流还多了2个方法
*void write(String str) 将字符串str包含的字符输出到指定的输出流中
*void write(String str,int off ,int len) 将字符串str从off的位置开始长度为len的字符输出到指定输出流中
*
*/
package cn.sxt.test; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; public class Test_0330_Writer {
public static void main(String[] args) throws IOException {
/*File file=new File("des.txt");
Writer writer=new FileWriter(file,true); String src="1949中华人民共和国ABC";
writer.write(src);
writer.close();
*/ //\r是回车符 \n是换行符 "\r\n" 在一起是windows平台的换行符 单独“\n”是 linux平台换行符。 Java跨平台无所谓了
FileWriter fWriter =new FileWriter("poem.txt");
fWriter.write("锦瑟-李商隐\n");
fWriter.write("锦瑟无端五十弦,一弦一柱思华年。\r");
fWriter.write("庄生晓梦迷蝴蝶,望帝春心托杜鹃。\n");
fWriter.write("沧海月明珠有泪,蓝田日暖玉生烟。\r\n");
fWriter.write("此情可待成追忆,只是当时已惘然。\r"); fWriter.close(); } }

二、字符缓冲类

 /**学习换缓冲字符类,是Reader和Writer类的亲儿子类
*缓冲字符流 BufferedReader/BufferedWriter 与 InputStreamReader/ OutputStreamWriter类平级
* 是前面常用的FileReader和FileWriter(文件字符类)的亲叔叔类
*关系:---------->1、BufferedReader/BufferedWriter(今天学习重点)
*Reader/Writer-->2、InputStreamReader/ OutputStreamWriter---》》2-1:FileReader和FileWriter(前边用过,文件字符类)
*--------------->3、
*/
package cn.sxt.test; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class Test_0330_BufferedChar {
public static void main(String[] args) throws IOException {
FileReader file=new FileReader("TuLongDao.txt");
FileWriter file2=new FileWriter("TuLongDao_copy.txt"); BufferedReader src=new BufferedReader(file);
BufferedWriter dest=new BufferedWriter(file2); //1、带字符缓冲数组的
long a=System.currentTimeMillis();
String temp=null;//readLine()方法是BufferedReader特有的方法,可以对文本文件按行读取
while ((temp=src.readLine())!=null) { //返回值是一个字符串对象,即文本中的一行内容
//将读取的一行字符串写入文件中
dest.write(temp);
//下次写入之前先换行,否则会在上一行后边继续追加,而不是另起一行
dest.newLine();
}
long b=System.currentTimeMillis();
System.out.println("使用IO自带的字符缓冲类花费:"+(b-a)+"毫秒"); src.close();
dest.close();
//2、不带文件缓冲数组的
FileReader file3=new FileReader("TuLongDao.txt");
FileWriter file4=new FileWriter("TuLongDao_copy2.txt"); long c=System.currentTimeMillis();
int len=0;//一个一个字符复制
while ((len = file3.read()) != -1) {
file4.write(len);
}
long d=System.currentTimeMillis();
System.out.println("不使用IO自带的字符缓冲类花费:"+(d-c)+"毫秒");
file3.close();
file4.close(); } }

[19/03/31-星期日] IO技术_四大抽象类_字符流( 字符输入流 Reader、 字符输出流 Writer )(含字符缓冲类)的更多相关文章

  1. [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)

    一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...

  2. JAVA IO分析一:File类、字节流、字符流、字节字符转换流

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

  3. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)

    一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...

  4. Java IO 技术

    文章目录 流的概念 IO 流类体系 InputStream / OutputStream Reader / Writer 文件字节流 文件字符流 缓冲字节流 缓冲字符流 字节数组流 数据流 转换流 序 ...

  5. Java IO流字符流简介及基本使用

    Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...

  6. IO流回顾与总结第一篇之字节流与字符流的操作。。。。。

    一.引言 趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来...... 回归正题,IO流顾名 ...

  7. Java IO编程——字符流与字节流

    在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...

  8. java:IO流(File,字节流/输入输出流(InputStream(FileInputStream),OutputStream(FileOutStream)),字符流(Reader,Writer))

    File: * java.io.File类:代表一个文件或目录. * 常用的构造方法: * File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例 ...

  9. Java IO之字符流和文件

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

随机推荐

  1. awk中引用变量使用单引号''

    举例如下 who命令输出第一列 (1)第一种情况不使用引号 # i=1;who | awk '{print $${i}}' 输出如下: awk: {print $${i}} awk:          ...

  2. .net core 填坑记之—格式转换问题

    最近在将项目从.net 迁移到.net core环境中,迁移完成后,发布于Windows平台上进行测试,所有功能均能正常运行. 为了项目能够在正式环境也能正常运行,提前进行Linux环境部署(Cent ...

  3. Java API 之 Properties 类

    1.简介 在项目中我们经常看到一种格式极其干净的配置文件,如:config.properties.在Java的体系结构中也提供了API对properties文件进行读取和写入等操作,即:Propert ...

  4. Java 基础(1)—— 开始前的准备

    虽然学习 Java 已有一年多,但是从来没有仔细总结或者复习过.于是准备借用博客来进行一波学习记录.从头开始,学习 Java. Java 介绍 生产公司:Sun Microsystems 公司(200 ...

  5. Spring Cloud面试题

    引言 面试中面试官喜欢问组件的实现原理,尤其是常用技术,我们平时使用了SpringCloud还需要了解它的实现原理,这样不仅起到举一反三的作用,还能帮助轻松应对各种问题及有针对的进行扩展.以下是 课程 ...

  6. springMVC基于注解的控制器

    springMVC基于注解的控制器 springMVC基于注解的控制器的优点有两个: 1.控制器可以处理多个动作,这就允许将相关操作写在一个类中. 2.控制器的请求映射不需要存储在配置文件中.使用re ...

  7. Nginx 502错误总结

    http请求流程:一般情况下,提交动态请求的时候,nginx会直接把 请求转交给php-fpm,而php-fpm再分配php-cgi进程来处理相关的请求,之后再依次返回,最后由nginx把结果反馈给客 ...

  8. 最新版PMBOK项目管理的五大过程组和十大知识领域

    PMBOK五大过程组是:启动过程.规划过程.执行过程.监控过程.收尾过程. 各用一句话概括项目管理知识体系五大过程组: 1.启动过程组:作用是设定项目目标,让项目团队有事可做: 2.规划过程组:作用是 ...

  9. 排序算法Nb三人组-归并排序

    归并排序只能对两个已经有序的列表进行合并排序,所以要我们自己创建出两个有序列表.最后在进行合并. def merge2list(li1, li2): li = [] i = 0 j = 0 while ...

  10. webservice使用windows身份验证,ajax请求报错401未授权的解决办法

    $.ajax({ type: "GET", url: service_url, dataType: "xml", data: "ParamId=&qu ...