节点流:
概念:
1.理解流的概念
2.InputStream与OutputStream类
3.FileInputStream与FileOutputStream类
4.Reader与Writer类
5.PipedInputStream与PipedOutputStream类
6.ByteArrayInputStream与ByteArrayOutputStream类
7.重视程序代码的复用性
字段"1."理解流的概念:
① 流 是 字节序列的 抽象概念;
② 文件 是 数据的 静态 储存形式,而 流 是指 数据 传输时的 形态;(文件是流可操作的IO之一)
③ 流类 分为 两个 大类:节点流类 和 过滤流类(处理流类);
字段“2.”:
InputStream类:
① 程序 可以 从中 连续读取字节的 对象 叫 输入流,在Java中,用InputStream类来 描述 所有输入流的 抽象概念。
② 此类的方法:int read():二进制形式为11111111的数据,以byte类型表示为-1,以int类型表示为255。int read(byte[] b):最多读取字节数组的长度。int read(byte[] b,int off, int len):读取len个数据。long skip(long n):跳过n个字节,返回 跳过的 字节数。int available():返回输入流中可读的字节数。void mark(int readlimit):从标记处开始,最多再读取readlimit个字节。void reset():与mark配合使用,回到mark所指位置。boolean markSupported():返回流是否支持mark和reset。void close():释放不用的流使用的系统资源。(注:mark和reset只适用于包装流)
OutputStream类:
① 程序可以向其中连续写入字节的对象叫输出流,在Java中,用OutputStream类来描述所有输出流的抽象概念。
② 此类的方法:void write(int b):最低字节被写入流。void write(byte[] b)。void write(byte[] b,int off, int len)。void flush()。void close()。
零星:通过缓冲区控制来排错。
FileInputStream与FileOutputStream类:
FIS:文件必须已存在可读。如果文件存在,文件原来的内容将被覆盖清除。
FOS:能指定不存在的文件名,不能指定已被其他程序打开的文件。
Reader与Writer类:
二进制文件与文本文件的区别:专门用于存储字符的文件为文本文件,其他的都是二进制文件。Reader和Writer是对文本文件进行输入输出的。
FileOutputStream在内部调用了flush;FileWriter类则没有调用,缓冲区的内容就没用进入文件。好像是因为FileOutputStream类可以处理字符串,而FileWriter只处理字符,导致FileWriter只知道一个字一个字的读,不知道读完一个字符串就停,或者说它根本就不知道字符串这种东西的存在。
PipedInputStream与PipedOutputStream类:
用于在应用程序中创建管道通信。线程通信。
PipedWriter 与PipedReader类:
管道流类。实现各个程序模块之间的松耦合通信。
ByteArrayInputStream与ByteArrayOutputStream类:
用于以IO流的方式 来完成对 字节数组 内容的读写,来支持类似 内训虚拟文件 或者 内存映像文件 的功能。
构造函数略。
StringReader与StringWriter类:
以字符IO流的方式处理字符串。对映ByteArray那两口子。
重视IO程序代码的复用:
System.in连接到键盘,是InputStream类型对象;System.out连接到显示器,是PrintStream类型对象。
InputStream的read方法始终返回-1来表示输入流结束。
Ctrl+z 你懂得,Ctrl+D是linux下的。
建议:1、如要从键盘读取大量数据时,尽量将读取数据的 过程 放在函数内,用-1来表示键盘输入结束了。
2、函数中的代码不应直接使用System.in类读取数据,而是使用一个InputStream类型的形参来读取数据,将System.in作为实参传递给InputStream类型的形参,来调用函数。
字符编码:
计算机里只有数字,计算机软件里的一切都是用数字来表示的,屏幕上显示的字符也不例外。
字符与数字对应的编码规则称为ASCII(美国标准信息交换码)。最高bit位为0,数字在0~127之间。
中国大陆将每个中文字符都用两个字节 数字 表示,中文每个字节最高位bit都为1,中国大陆为每个中文字符制定的编码规则称为GB2312(国标码)。后来加入更多的中文字符和繁体,编码规则称为GBK。中国大陆使用的计算机系统上,这俩国标被称为本地字符集。
中国台湾的编码规则称为BIG5
Unicode编码:
ISO对全世界所有符号进行统一编码。
例:“中”,在全世界任何角落始终对应4e2d。
对于原ASCII,增加一个bit全为0的字节。
Unicode表示的字符个数有65536个,还有两千多个没用。
Java很NB的支持了本地和U集。
UTF-8编码:
UTF-8,对ASCII保持原样,占一个字符,对其他国家,占2~3个字节。用EF BB BF在文件开头,标记UTF8编码。
UTF8优点:
1.Unicode会有0x00……之类的,与C语言之类的会产生冲突。UTF8没有
2.便于应用程序检测数据在传输过程中是否发生了错误
3.直接处理使用ASCII码得英文文档
UTF8缺点:
1.某些字符需要3个字节。
UTF-16编码:
是Unicode的扩充……不行了,纯理论的笔记让我吐血……
字符编码的操作体验:
查看中文字符的GB2312、UTF8、Unicode……等各种操作。
字符编码应用的一个奇怪现象