java--基础---字符流

本文详细介绍了Java中的IO流概念及其实现方式,包括字符流与字节流的区别、常用流类如FileWriter、BufferedReader的功能与使用方法,以及行分割符的获取方式。
1.行分割符在java中可以通过方法得到.
 系统属性名是line.separator.
 不同平台的行分隔符是不同的。
 windows7:\r\n

 macOS :\n

System.getProperty("line.separator"); //执行系统属性名/



2.FileWriter : 没有缓冲区功能、
---------------------------
本身没有新增任何功能,继承的OutputStreamWriter。
write(){
//直接写入数据到文件中。
sun.nio.cs.StreamEncoder.write(...);
}




3.BufferedWriter:(有缓冲区,先将文件写入缓存区,缓存区满之后,将缓存区中的内容写到目标文件中)
----------------------------------
对Writer进行包装,里面定义缓冲区,提供写入单个字符、char[]、String方法。
提高写入效率。( 默认为8k,如果每次读得比较小,则放在缓存中,减小交互次数)


等级树结构:Object --> Writer --> BufferedWriter
flushBuffer() : 清理缓冲区,将缓冲区数据写入目的地。
close()方法 : 包含flushBuffer()。




4.FileReader
-----------------
继承关系树:Object --> Reader --> InputStreamReader --> FileReader
read() {
InputStreamReader.read(){
sun.nio.cs.StreamDecoder.read();
}
}
 


5.BufferedReader
------------------
继承关系树:Object --> Reader --> BufferedReader --> LineNumberReader
read(){
char[] cbuf = ... ;
cbuf[xxx] = c ;
fill();
return c ;
}
避免对物理文件的频繁访问。


6.关于IO流

ØIO流用来处理设备之间的数据传输
ØJava对数据的操作是通过流的方式
ØJava用于操作流的对象都在IO包中
Ø流按操作数据分为两种:字节流与字符流。 
Ø流按流向分为:输入流,输出流。
7.IO流常用的基类
  Ø字节流的抽象基类:
ØInputStream,OutputStream。
Ø字符流的抽象基类:
ØReader, Writer。
Ø注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
Ø如:InputStream的子类FileInputStream。
Ø如:Reader的子类FileReader。

8.字符流:创建文件

Ø创建流对象,建立数据存放文件
Ø FileWriter fw = new FileWriter (“Test.txt”);
Ø调用流对象的写入方法,将数据写入流
Ø fw.write (“text”);
Ø关闭流资源,并将流中的数据清空到文件中。(关闭的原因:系统每次传流都要占内存,如果不关闭,操作流时系统内存会被无限占用,会死机)
Ø fw.close ();
9.字符流:读取文件
Ø建立一个流对象,将已存在的一个文件加载进流。
ØFileReaderfr = new FileReader(“Test.txt”);
Ø创建一个临时存放数据的数组。
Øchar[] ch = new char[1024];
Ø调用流对象的读取方法将流中的数据读入到数组中。
Øfr.read(ch);

10.注意事项:

Ø定义文件路径时,可以用“/”或者“\\”。
Ø在创建一个文件时,如果目录下有同名文件将被覆盖。
Ø在读取文件时,必须保证该文件已存在,否则出异常。
11.字节流:

Ø基本操作与字符流类相同
Ø但它不仅可以操作字符,还可以操作其他媒体文件
12.字节与字符的区别

(一)“字节”的定义

字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。


(二)“字符”的定义

字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。


(三)“字节”与“字符”

它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:

ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。

符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

UTF-32编码中,世界上任何字符的存储都需要4个字节。




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值