首页 > 代码库 > java io(1)

java io(1)

分4块来学习java I/O。

基于字符的:InputStream,OutputStream

基于字节的:Writer,Reader

基于磁盘的:File

基于网络的:Socket

前两个是传输数据的数据格式,后面两个是传输数据的方式。

有IDEA的同学,跟着我一起做,没有IDEA的同学,下载安装好以后跟着我一起做。不想动手跟着一起做的,想象着跟我一起做。

1、Ctrl+N,找到InputStream这个类,类名上右键Diagrams->Show Diagram...

2、删除其他的类,选中inputStream,Ctrl+Alt+B,搜索下图中的类,加到图中,重复直到加载到下图中的所有类。

3、处女座同学请按F5,以减轻不适感。非处女座同学请自便,不过我也建议你F5一下。

技术分享

然后,每个类分别选中后按F4进去看注释。。。然后请英语好的同学指出我翻译的错误之处。。

ObjectInputStream:1、这货deserialize 那些之前被其好基友ObjectOutputStream给写过的primitive数据或者objects。请配对使用。2、这货除了用来还原基友搞得事情,还可以用socket在主机间传对象,还可以在远程交流的时候marshal以及unmarshal参数和参数。(自己百度parameter和argument的区别)3、你要序列化,你要jvm里有相关的类。4、readObject读出来自行强转成需要的格式,Strting和数组在这里是正经Object,至于那些低级的primitive,会报错的。primitive可以用DataInput的适当方法取出来。6、transient和static的会被无情地无视掉。引用的其他类也会被读的,deserialize 总是新申请地儿来放Object。很纯洁不会污染。No-arg constructors are invoked for the non-serializable classes这句话没看懂。

FileInputStream:文件好理解不解释。

BufferedInputStream:可以指定一个buffer的大小,提高传输速率的,原理上让人联想到nio,事实上网上一些测试也说性能跟nio差别不大,在两个都能达到目的的场景下用这货会比较简单些。

DataInputStream:其实就是语法糖,底层传的都是byte,用这货的好处是可以不用记各个primitive类型占了几个坑,怎么进怎么出就行。

PipedInputStream:跨线程搞事情,生产者消费者模型。

同理作图:

技术分享

技术分享

技术分享

内部通过StringEncoder和CharSet进行转化,转出来乱码的话自己去调编码。

 




java io(1)