1.输入和输出:
输入:inputStream,从多种起源地读取数据输入到内存中;这些起源地包括如下:
1)字节数组
2)String对象
3)文件
4)管道
5)socket
衍生类:
ByteArrayInputStream字节缓冲区读取;
DataInputStream基本类型读取;
StringBufferInputStream字符串缓冲流读取;
FileInputStream文件缓冲流;
PipedInputStream管道缓冲流;
缓冲流对于inputStream来说,读取效率要高,但是,要注意在使用完毕之后,关闭缓冲流,释放掉相应的缓冲内存。
输出:outputStream,将内存数据写入到指定的目的地;
ByteArrayOutputStream 字节缓冲区写入;
DataOutputStream基本类型数据写入;支持多种基本类型的write
FileOutputStream文件缓冲写入;
PipedOutputStream管道缓冲写入;
RandomAccessFile:
用来访问那些保存数据记录的文件的,可以用seek()进行访问,且进行读写;还可以实现文件的大小,跳过指定长度等;
不是inputStream和outputStream的衍生类;
File类:既代表一个特定文件名字,又代表目录内一系列文件的名字;
Reader/Writer与InputStream/OutputStream的关系:
1)并不是Reader/Writer替换了InputStream/OutputStream,而是保持向后兼容;
2)InputStream/OutputStream是java1.0提供的;Reader/Writer是java1.1提供的;
3)InputStream只支持8位字节流,Reader/Writer支持16位字节流,(java内含的char是16位的Unicode);
4)未做改动的几个stream:
DataOutputStream 作为一种按数据格式保存和获取数据的流
File
RandomAccessFile
SequenceInputStream
5)流转换示例:
DataInputStream in=new DataInputStream( new BufferedInputStream( new FileInputStream("data.txt")));
BufferedReader inbr=new BufferedReader( new InputStreamReader(in));
in.readDouble();
inbr.readLine();
String s2=new String("sssss");
StringReader s2sr=new StringReader(s2);
文件解压缩:
java1.1提供的压缩类功能是从InputStream/OutputStream拓展出来的;
CheckedInputStream GetCheckSum() 附加验证码的解压操作
CheckedOutputStream GetCheckSum() 附加验证码的压缩操作
DeflaterOutputStream 用于压缩类的基础类:
ZipOutputStream DeflaterOutputStream 的拓展类,将数据压缩成Zip文件格式;
GZIPOutputStream DeflaterOutputStream 的拓展类,将数据压缩成GZIP文件格式;
DeflaterInputStream用于解压类的基础类:
ZipInputStream DeflaterInputStream的拓展类,解压用Zip文件格式保存的数据;
GZIPInputStream DeflaterInputStream的拓展类,解压用GZIP文件格式保存的数据;
注意:在使用GZIP进行解压缩时,如果要支持中文,则将编码方式设置为GBK;
ASCII GBK unicode utf-8(utf-16)的关系:
都是字符编码,字符只有被编码后才可以被计算机识别,而转换后的就称之为计算机的内码,早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GBK编码长度是英文1一个字节,中文两个字节,utf-8是因为一个字节,汉字三个字节,它是由uncode发展而来的,unicode支持全世界的文字编码,每个都是两个字节;utf-8针对英文编码效率更高;
UTF-8就是以8位为单元对UCS进行编码;UTF-16以16位为单元对UCS进行编码;uncode只是一个编码方案,而utf编码则要用于实际传输;GBK也要用于实际传输;
ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容 如果GBK要转UTF-8必须先转uncode码,再转utf-8就OK了.