最近在做实践的时候,越来越多的接触到java的输入输出流。 由于之前上课的时候不踏实,没怎么练习。造成对流的使用不熟悉,每次使用都要去看以前的例子,才能继续往下做。 真是火大。 都是对知识的理解不够造成的。另一方面,这方面的知识也比较多,类结构复杂,一会又是字节读写,一会又是字符读写,一会又是缓冲读写,又是什么包装流,原始流之类的。 尽管这些理论都补充的不要不要的了,但是都是写什么玩意啊,碰到又学碰到又学,烦死人。 今天就怒开一帖,记录下自己的不怎么成熟的见解,方便以后知识的迭代。
之前看过一些源码,知道了解一个体系,如集合,线程,网络编程等,最好去了解其父类以及父接口。
InputStream是一个抽象类,实现了Closeable接口。 是所有与输入(由外界到内存)的父类。 平常常用的,主要的有:
FileInputStream,PipedInputStream,ByteArrayInputStream,StringBufferInputStream.
OutputStream大同小异,就懒得写了。
下面记录一下理解: 何谓流?流量,水流 输入流 输出流 听的不要太多。 流的本质: 其实就是字节序列,也就是byte[],里面的内容,即由一个一个的010101等表示的,按照特定的协议读取出来,让程序或结点理解。 在本机内部通过总线流通,在网络中通过tcp/ip体系流通。 流的各种各样乱七八糟的子类,无非就是对 byte[] 进行了一个包装,让其按照把最基本的单位设置为想要的单位。(这个可以通过看inputStream的类及其子类结构证明)
下面对流的发送进行一个猜想: 流并不能像水流那样,随着重力有一点走一点,那样就乱了套了。应该会在流发送的开始以及结束采用特定的标志,形成一个完整的数据。发送有可能实时,但是如果没有接收到应用程序的完成消息时,接收方要么丢弃该不完整流,什么也不显示。要么显示程序损坏,无法打开。
对流的读取与写入即 write() 和 read()方法的理解: 方法体内引用的实参为 复合数据类型时,读取的内容即装在该内存地址中,返回值表示的含义为读取到的位置。如 byte[] ,char[],等等。 如果方法体内引用的实参为 基本数据类型时,读取的内容以返回值呈现,寄存器保存,出栈即消亡。