[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编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
随机推荐
- Messenger和MVVM中的View Services
在前面的文章IoC容器和MVVM中, 介绍了IoC容器如何在大量用户类中帮助创建和分配用户类的实例.本文将介绍IoC容器如何帮助应用程序解耦,比如那些根据MVVM模式开发的应用.此模 式广泛应用在基于 ...
- CXF - JAX-WS入门
相关dependency,我使用的版本是2.7.11: <dependency> <groupId>org.apache.cxf</groupId> <art ...
- HDU 3191 次短路长度和条数
http://www.cnblogs.com/wally/archive/2013/04/16/3024490.html http://blog.csdn.net/me4546/article/det ...
- Spring 中的scope
scope有Singleton.Prototype.request.session.global session.其中主要的是singleton和prototype. singleton指的是IOC容 ...
- IntelliJ IDEA快速创建属性字段的get和set方法
1.写好属性字段后,在代码面板右击,选择generator… 再选择 Getter and Setter 全选中(Ctrl + A),点击OK! 2.也可以选择使用快捷键:alt+inse ...
- postgres备份数据库
1. psql --help psql is the PostgreSQL interactive terminal. Usage: psql [OPTION]... [DBNAME [USERNAM ...
- 部署node.js的开发环境
1.进入Node.js的官方网站下载安装包: http:nodejs.org 2.安装后打开cmd的dos窗口(在path环境变量中查看到有nodejs说明安装成功): 3.运行node.
- DELPHI SOKET 编程--使用TServerSocket和TClientSocket
本文采用delphi7+TServerSocket+TClientSocket; 笔者在工作中遇到对局域网中各工作站与服务器之间进行Socket通信的问题.现在将本人总结出来的TServerSocke ...
- c++ inline 的位置不当导致的 无法解析的外部符号
这几天编写代码碰到 无法解析的外部符号 visual studio. 在类中 inline 修饰符应该放在类函数定义的时候而不是声明的地方 即 // test.h 头文件 class A { publ ...
- Oracle案例05——ORA-12162: TNS:net service name is incorrectly specified
最近在梳理环境,发现环境真的不是一般的复杂,配置不是一般的乱,刚在梳理环境的时候发现一个库通过conn /as sysdba无法连接,具体处理过程如下: 一.错误信息 [oracle@ ~]$ sql ...