[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编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
随机推荐
- mysql case when的使用
SELECT (CASE payType WHEN 1 THEN '微信' WHEN 2 THEN '支付宝' ELSE '余额' END) as type, count(payType) FROM ...
- 1004. 填充矩形 (Standard IO)
题目描述 已知矩形的大小为n×m,现用a×a的正方形填充该矩形.输入三个正整数n,m,a(n,m,a≤10^9),计算至多能填入多少正方形?(正方形可以正好碰到矩形边界,但不能超出矩形外) 输入 一行 ...
- js修改日期
需求说明: (1)首先是input显示年月日时分格式时间,其中年月日实在本地时间基础上,加上后面联动值.小时默认08:00不变 (2)后面input内显示天数,右侧加减按钮,控制天数,天数确定后,前面 ...
- Junit 单元测试、BeanUtils、Properties类
一. Junit单元测试 1.1. Junit单元测试框架的基本使用 一.搭建环境: 导入junit.jar包(junit4) 二.写测试类: 0,一般一个类对应一个测试类. 1,测试类与被测试类最好 ...
- 关于ES7里面的async和await
async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度,本篇文章将分享asy ...
- Windows API 编程----EnumWindows()函数的用法
1. 函数原型: BOOL WINAPI EnumWindows( _In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam); lpEnumFunc: 应用程序 ...
- Windows API 编程-----Windows NT 环境下禁止任务切换
函数原型: BOOL WINAPI SystemParametersInfo( _In_ UINT uiAction, _In_ UINT uiParam, _Inout_ PVOID pvParam ...
- 动画演示10个有趣但毫无用处的Linux命令
Linux最强大的一个特征就是它有大量的各种小命令工具,这也可以称做是它最有趣的一个地方了.在这些大量的有用的命令和脚本中,你会发现有少部 分命令工具不那么有用的——如果你不愿意说是完全没用处的话.你 ...
- 抖音C#版,自己抓第三方抖音网站
感谢http://dy.lujianqiang.com技术支持 文章更新:http://dy.lujianqiang.com这个服务器已经关了,现在没用了 版权归抖音公司所有,该博客只是为交流学习所使 ...
- css properties
white-space:描述如何处理元素中的空格 word-wrap:(以单词为单位,比如长单词则转行拆分,短单词则直接留空换行!) 用来说明当一个不能被分开的字符串太长因而其containing b ...