[19/03/31-星期日] IO技术_四大抽象类_字符流( 字符输入流 Reader、 字符输出流 Writer )(含字符缓冲类)
一、概念
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 )(含字符缓冲类)的更多相关文章
- [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)
一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...
- JAVA IO分析一:File类、字节流、字符流、字节字符转换流
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)
一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...
- Java IO 技术
文章目录 流的概念 IO 流类体系 InputStream / OutputStream Reader / Writer 文件字节流 文件字符流 缓冲字节流 缓冲字符流 字节数组流 数据流 转换流 序 ...
- Java IO流字符流简介及基本使用
Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...
- IO流回顾与总结第一篇之字节流与字符流的操作。。。。。
一.引言 趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来...... 回归正题,IO流顾名 ...
- Java IO编程——字符流与字节流
在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...
- java:IO流(File,字节流/输入输出流(InputStream(FileInputStream),OutputStream(FileOutStream)),字符流(Reader,Writer))
File: * java.io.File类:代表一个文件或目录. * 常用的构造方法: * File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例 ...
- Java IO之字符流和文件
前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
随机推荐
- [转]前端构建工具gulpjs的使用介绍及技巧
本文转自:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非 ...
- 《Java并发编程实战》读书笔记(一)----- 简介
简史 早期的计算机中不包含操作系统,从头至尾都只执行一个程序,并且这个程序能访问计算机所有资源.随着计算机发展,操作系统的出现,使得计算机可以同时运行多个程序,并且每程序都在单独的进程内运行.为什么要 ...
- asp.net 日期转换为大写汉字
//年份转换为大写汉字 public static string numtoUpper(int num) { return "零壹贰叁肆伍陆柒捌玖"[num].ToString() ...
- 洛谷P3953 逛公园(dp 拓扑排序)
题意 题目链接 Sol 去年考NOIP的时候我好像连最短路计数都不会啊qwq.. 首先不难想到一个思路,\(f[i][j]\)表示到第\(i\)个节点,与最短路之差长度为\(j\)的路径的方案数 首先 ...
- 洛谷P1072 Hankson 的趣味题(数学)
题意 题目链接 Sol 充满套路的数学题.. 如果你学过莫比乌斯反演的话不难得到两个等式 \[gcd(\frac{x}{a_1}, \frac{a_0}{a_1}) = 1\] \[gcd(\frac ...
- 记录开发Nodejs c++ addon的一些经验(四、electron)
如果我们要在electron里使用我们开发的addon,那么直接使用是不行的. 官方的解释是:Electron 同样也支持原生模块,但由于和官方的 Node 相比使用了不同的 V8 引擎,如果你想编译 ...
- Python基础-接口与归一化设计、抽象类、继承顺序、子类调用父类,多态与多态性
一.接口与归一化设计 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 由 ...
- [转]JSON.parse()和JSON.stringify()
parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":&qu ...
- Codeforces Round #416 (Div. 2) A+B
A. Vladik and Courtesy 2 seconds 256 megabytes At regular competition Vladik and Valera won a and ...
- python SQLAchemy常用语法
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. ...