java中IO的一些细节的复习

来源:互联网 发布:seo的相关术语 编辑:程序博客网 时间:2024/05/23 19:14

Java的高级部分

Skip表示跳过流中多少个字节后进行读取,available表示可以从当前流中不受阻碍的读取的字节数,(加入网络流中有人往里面输入了30个字节,那么我们的读取流就可以从中读取的不受阻碍的字节数就是30),mark就是为我们的流中设置一个标志,mark(int readlimit)readlimit参数表示可以从标志处往后读取的字节数,mark一般与reset一起结合使用,reset表示重新回到我们标志处进行流中数据的读取,markSupported()表示是否可以进行标志的设置,close关闭流,我们竟然有了垃圾回收机制,那么我们为什么还需要对流进行关闭?其实当我们打开一个流的时候,我们的java程序就建立了一个实例对象,而且我们的操作系统其实也建立一个关于流的对象,我们的垃圾回收机制只是负责我们的java实例对象的回收,并不能对我们的操作系统的里面的资源进行回收,所以为了节省内存空间,我们最好自己回收操作系统里面建立的流对象,skip、mark、reset这些方法并不能在字节流中使用,只能够在包装流才能够使用

这里需要提示的是:我们每次调用输出流的时候,我们最好调用一下flush,把输出流给刷出去,这样可以避免有些数据可能停留在内存缓存区中,而没有刷到IO设备中去。但是我们又想到另外一个问题,我们用flush刷出去,为什么不直接关闭(close)关闭这个输出流呢?关闭输出流也可能把数据直接给刷出去。

这里需要注意的一点是:在java中所说的输入、输出都是相对于应用程序而言。

这是管道流,用于在两个线程之间的数据的读取和写入

字符编码

字节是计算机最底层的,一般不会涉及编码方式,只有当字节构成的字符的时候,才会存在编码的。所以我们的inputStream、outputStream是不涉及编码的,只有reader、writer、string这些字符才会涉及到编码

BufferedWriter里面有一个newLine这是一个换行符,可以针对任何类型的操作系统的换行符。非常方便。

因为inputStreamReader、outputStreamWriter这两个类都会读、写一个字节就会把字节转换成一个字符,这样就会频繁的处于转换中。不好。

在java程序中可以用Process类的实例对象来表示子进程,子进程的标准输入和输出不在连接到键盘和显示器,而是以管道流的形式连接到父进程的一个输出流和输入流对象上-à好好理解这句代码就能看懂那个程序。