您的位置:首页 > 编程语言 > Java开发

《java编程思想》第十八章 java I/O系统

2016-09-19 17:10 239 查看
对程序语言来说,创建一个好的输入/ 输出(I/O)系统是一项艰难的任务。所以有必要了解下 I / O 类库的演化过程,因为缺乏历史的眼光我们很快就会不知道在什么时候使用那些类。

首先File类:既可指文件也可以指代目录文件夹。当返回的是某目录下的一组文件的名称时,存储这些名称的是数组。

目录列表器:两种方式使用File对象一种直接调用不带参数的list(),拿到数组然后sort()进行排序。

目录实用工具:方法一:listFile().asList().sort()   方法二:recurseDirs()

目录检查及创建:renameTo()用来把文件  重命名/移动  有参数指定的路径的目录下。

输入和输出:Inputstream或者Reader 都含有read()方法,用于读取单字节或字节数组。Outputstream或者Writer都含有write()方法。java中"流"类库让人迷惑的主要原因在于:创建单一的结果流,却需要创建多个对象。

下面试关于Inputstream类型:数据源包括:1字节数组  2String对象  3文件  4“管道”工作方式其实与管道相似  5由其他种类的流组成的序列,以便我们可以将它们收集合并到一个流内  6其他数据源,例如Internet连接等。。。

inputstream类型的装饰器:

ByteArrayInputStream:InputStream的缓冲区,字节流

DataIputstream:允许读取不同基本类型以及String对象

StringBufferInputStream:底层实现使用的是StringBuffer,字符串流 

FileInputStream:用于文件流中读取信息,字符串,表示文件名、文件、或FileDescriptor对象。

PipedInputStream:产生用于写入PipedOutputStream的数据。实现“管道化”概念。

SequenceInputStream:将两个或多个InputStream转换成单一的InputStream

FileterInputStream:抽象类,作为装饰器的接口,为其他的inputStream类型提供功能

Outputstream类型的装饰器:

ByteArrayOutputStream:在内存中创建缓冲区,所有送往“流”的数据都要放置在缓冲区中,缓冲区大小可设置

DataOutputStream:通过数据“流”将基本类型的数据从一个地方迁移到另一个地方

FileOutputStream:用于将信息写入文件,字符串,表示文件名、文件、或FileDescriptor对象。

PipedOutputStream:任何写入其中的信息都会自动作为PipedOutputStream的输出。实现“管道化”概念。

FileterOutputStream:抽象类,作为装饰器的接口,为其他的OutputStream类型提供功能

添加属性和有用的接口:java的I / O 库类中存在“filter”类的原因是filter类是所有装饰类的基类。

Reader 和Writer主要是为了国际化。

RandomAccessFile自我独立的类:有大小已知的记录组成的文件。

I/O的经典实用方式:1缓冲输入文件  2从内存输入  3格式化的内存输入  4基本的文件输出   5文件输出的快捷方式   6存储或者恢复数据   7读写随机访问文件   8读取二进制文件

标准I/O:System.in、System.out、System.err。其中System.out、System.err事先被包装成printStream,System.in确实一个没有经过包装的InputStream。这就意味着System.in在使用之前必须进行包装(通常会用readLine())。
java I/O重定向操作的是字节流而不是字符流。所以使用的是Inputstream和OutputStream而不是Reader和Writer。

字节存放次序:big endian(高位优先):将最重要的字节存在地址最低的存储单元。  little endian:与高位优先相反

缓冲器:高效访问及操作数据的四个索引组成(mark、position、limit、capacity)

压缩:java的I/O支持读写压缩格式的数据流。主要的类有CheckedInputStram  CheckOUtputStream  DeflaterOutputStream  ZipOutputStream  GZIPOutputStream  InflaterInputStream  ZipInputStream  GZIPInputStream

对象序列化:java对象序列化将实现Serilizable接口对象转化成一个字节序列。这样就可以实现轻量级“持久化”,即便经过网络传输到不同系统的电脑中也可以准确的重组。

总的来说:java的I/O满足了我们的基本需求:我们可以通过控制台、文件、内存块甚至因特网进行读写,通过继承创建输入输出对象等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: