系统属性名是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流
(一)“字节”的定义
字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。
(二)“字符”的定义
字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。
(三)“字节”与“字符”
它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:
①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。
②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。
④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。
本文详细介绍了Java中的IO流概念及其实现方式,包括字符流与字节流的区别、常用流类如FileWriter、BufferedReader的功能与使用方法,以及行分割符的获取方式。
2065

被折叠的 条评论
为什么被折叠?



