`
阅读更多
1.        输入流和输出流以字节为单位读取,抽象类是 InputStream 、 OutputStream 。

2.        抽象类 Reader 、 Writer 的读入和写出操作都是基于两字节的 Unicode 码元的。

3.        InputStream 类有一个抽象方法 read ,该方法读入一个字节,并返回读入的字节,或者在遇到输入源结构末尾的时返回 -1 。所有的输入类都必须覆盖这个方法。

4.        OutputStream 类有一个抽象方法 write ,该方法输出一个字节。同样所有的输出类都必须覆盖这个方法。

5.        read 和 write 方法在执行时都将阻塞,直至字节确实被读入或写出。

6.        available 方法可以去检查当前可用于读入的字节数量

7.        完成读写操作时,应该调用 close 方法来关闭它,目的是释放操作系统的资源。 Flush 方法用于清空输出流。

8.        java 提供了众多基本的 InputStream 和 OutputStream 类导出的类,这些类可以处理那些常用格式的数据,而不只是在字节级别上表示的数据。

9.        JDK5 引入了 Closeable 、 Flushable 、 Readable 和 Appendable 四个接口,其中只有 Writer 实现了 Appendable 接口

10.    使用 System.getProperty(“user.dir”) 来获得用户工作目录

11.    JAVA IO 使用了 装 饰 ( Decorator )模式 ,可以将几个输入或者输出流的功能组合到一起。比如我们想使用缓存机制,以及用于文件的数据输入,要实现这个功能,应该如下方法来写: DataInputStream din=new DataInputStream(new BufferedInputStream(new FileInputStream(“employee.dat”)))
12.    输入流的预先预览可以用 PushbackInputStream 类来实现。如果不是期望的值可以将读入的字节回推到输入流中
13.    OutputStreamWriter 类将使用选定的字符编码方式,把 Unicode 字符流转换为字节流。相反地, InputStreamReader 类将包含字节的输入流转换为可以产生 Unicode 字符的读入器
14.    以二进制格式写出数据,需要使用 DataOutputStream 。以文本格式写出数据,需要使用 PrintWriter
15.    文本格式数据的读入在 JDK5.0 之前惟一方式就是 BufferedReader 类, JDK5.0 之后可以使用 Scanner 类来实现。建议使用 Scanner 类。
16.    Java SE 1.4 开始引入的 java . nio 包用引入的 Charset 类统一了对字符集的转换
17.    字符集建立了两字节 Unicode 码元序列与使用本地字符编码方式的字节序列之间的映射。
18.    本地编码方式模式不能表示所有的 Unicode 字符,如果某个字符不能表示,它将被转换成?。
19.    二进制文件的写出可以使用实现了 DataOutput 接口的 DataOutputStream ,写入使用实现了 DataInput 接口的 DataInputStream
20.    RandomAccessFile 类可以在文件中的任何位置查找或写入数据。在打开随机访问文件时,只用于读入或者同时用于读写时,我们可以通过使用字符串“ r ”或者“ rw ”作为构造器的第二个参数来指定这个选项。
21.    在 java 中可以使用 ZipInputStream 来读入 ZIP 文档,浏览压缩文件中单独的项的时候可以使用 getNextEntry 方法就可以返回一个描述这些项的 ZipEntry 类型的对象。典型读取 ZIP 文件的代码:


Java代码 
1.ZipInputStream zin = new ZipInputStream(new FileInputStream(zipname));  
2. 
3.ZipEntry entry;  
4. 
5.while((entry = zin.getNextEntry) != null){  
6. 
7.              // Analyze entry  
8. 
9.//Read the contents of zin;  
10. 
11.zin.closeEntry();  
12. 
13.}  
14. 
15.zin.close(); 
ZipInputStream zin = new ZipInputStream(new FileInputStream(zipname));

ZipEntry entry;

while((entry = zin.getNextEntry) != null){

              // Analyze entry

//Read the contents of zin;

zin.closeEntry();

}

zin.close(); 
22.    在 java 中写出到 ZIP 文件用 ZipOutputStream , 而对于你希望放入到 ZIP 文件中的每一项,都应该创建一个 ZipEntry 对象,并将文件名传递给 ZipEntry 的构造器,它将设置其他诸如文件日期和解压方法等参数。如果需要,你可以覆盖这些设置。然后,你需要调用 ZipOutputStream 的 putNextEntry 方法来开始写出新文件,并将文件数据发送到 ZIP 流中。当完成时,需要调用 closeEntry 。



Java代码 
1.FileOutputStream fout = new FileOutputStream(“test.zip”);  
2. 
3.ZipOutputStream zout = new ZipOutputStream(fout);  
4. 
5.for all files{  
6. 
7.        ZipEntry ze = new ZipEntry(filename);  
8. 
9.        zout.putNextEntry(ze);  
10. 
11.        send data to zout;  
12. 
13.        zout.closeEntry();  
14. 
15.}  
16. 
17.zout.close(); 
FileOutputStream fout = new FileOutputStream(“test.zip”);

ZipOutputStream zout = new ZipOutputStream(fout);

for all files{

        ZipEntry ze = new ZipEntry(filename);

        zout.putNextEntry(ze);

        send data to zout;

        zout.closeEntry();

}

zout.close(); 
23.    ObjectInputStream 和 ObjectOutputStream 可以操作对象的读入和写出。但要对被存储或恢复的所有类进行修改,这些类就必须实现 Serializable 接口。 Serializable 接口没有任何方法。

24.    每个对象序列化保存不是用对象的地址,而是用一个序列号( serial number )保存的。所以我们把这种机制称为对象序列化。

25.    对象序列化的算法为:

l         对你遇到的每一个对象引用都关联一个序列号。

l         对于每个对象,当第一次遇到时,保存其对象数据到流中。

l         如果某个对象之前已经被保存过,那么只写出“与之前保存过序列号为 x 的对象相同”。在读回对象时,整个过程是反过来的。

l         对于流中的对象,在第一次遇到其序列号时,构建它,并使用流中数据来初始化它,然后记录这个顺序号和新对象之间的关联。

l         当遇到“与之前保存过的序列号为 x 的对象相同”标记时,获取与这个顺序号相关联的对象引用。

26.    流类关心的是文件的内容,而 File 类关心的是在磁盘上文件的存储。 File 类可以用来查询文件最后的修改时间,移除或重命名文件。

27.    为了考虑文件操作的平台可移植性问题,文件的分隔符最好用常量字符串 File.separator 形式来存储。

28.    File 对象既可以表示文件,也可以表示目录。

29.    在处理文件或者目录名时,应该总是使用 File 对象而不是字符串。这样做的好处很多,如: File 类的 equal 方法指导某些文件系统不是大小写敏感的,或者在目录名尾部的(是无关紧要的)。

30.    在使用 File 类的 list 方法的时候,可以使用 FileNameFilter 对象作为参数来减少列表长度。而不是列出目录中所有的文件。

31.    Java1.4 引入了大量用于改进输入 / 输出处理机制的特性。它们位于 java.nio 包中,合称“新 I/O ”。主要包括一下特性

l         字符集编码器和解码器

l         非阻塞的 I/O

l         内存映射文件

l         文件加锁机制

32.    java.nio 包使内存映射变得十分简单,首先通过 FileInputStream , FileOutputStream , RandomAccessFile 类通过 getChannel 方法获得通道。通道是用于磁盘文件的一种抽象。然后通过调用 FileChannel 类的 map 方法从磁盘中获得一个 MappedByteBuffer 。一旦有了缓冲区,就可以使用 ByteBuffer 类和 Buffer 超类的方法读写数据了。缓冲区支持顺序和随机数据访问,它有一个可以通过 get 和 put 操作来推动的位置。

33.    缓冲区是由具有相同类型的数值构成的数组, Buffer 类是一个抽象类,它有众多的具体子类,包括 ByteBuffer , CharBuffer , DoubleBuffer , IntBuffer,LongBuffer 和 ShortBuffer 。但要注意 StringBuffer 与这些缓冲区没有关系。在实际中常用 ByteBuffer 和 CharBuffer 。

34.    每个缓冲区都具有:

l         一个容量,它永远不能改变。

l         一个读写位置,下一个值将在此进行读写。

l         一个界限,超过它进行读写是没有意义的。

l         一个可选的标记,用于重复一个读入或写出操作。

这些值满足下面条件

0<= 标记 <= 位置 <= 界限 <= 容量

35.    使用缓冲区的主要目的是执行“写,然后读入”循环。

36.    要锁定一个文件,可以调用 FileChannel 类的 lock 或 tryLock 方法:

FileLock lock = channel . lock ();



FileLock lock = channel . tryLock();

第一个调用会阻塞直至可获得锁,而第二个调用将立即返回,要么返回锁,要么在锁不可获得的情况下返回 null 。另外也可以锁定文件的一部分。与锁定文件的方法名一样,只是传递的参数不同。

37.    文件加锁机制是依赖于操作系统的。所以应该避免使用文件夹锁。
0
1
分享到:
评论

相关推荐

    SAP SD工作流介绍

    SAP SD工作流介绍 Sales and Distribution (SD) Workflow Scenarios

    JIRA工作流介绍

    ### JIRA工作流详解 #### 一、工作流概述 工作流是JIRA中的核心功能之一,用于模拟和支持项目的实际业务流程。通过定义工作流,可以使项目管理更加规范和高效。工作流通常包括一系列的步骤(阶段)以及连接这些...

    Oracle工作流介绍

    ### Oracle工作流介绍 在企业级应用开发与管理领域,Oracle 工作流技术一直扮演着举足轻重的角色。本文将对Oracle工作流的基本概念、功能特点以及应用场景进行详细介绍。 #### 一、Oracle工作流概述 Oracle工作流...

    普元EOS 工作流介绍

    **普元EOS工作流介绍** 普元EOS工作流系统是一种基于服务导向架构(SOA)的企业级业务流程管理(BPM)解决方案。它提供了一种可视化的工作流设计工具,帮助企业快速构建、部署和管理复杂的业务流程,从而提高运营...

    maximo工作流介绍

    ### Maximo工作流介绍 #### 一、工作流概述 工作流可以被理解为一种图形化的指导流程,它用于引导用户或记录按照预设的步骤进行操作。在Maximo系统中,工作流的设计和实现主要依赖于“工作流设计器”这一工具。...

    JBPM 工作流介绍 PPT

    【JBPM工作流介绍PPT】是一份针对工作流管理和开源工作流引擎jBPM的培训资料,旨在帮助IT专业人士理解和应用工作流技术。工作流起源于生产组织和办公自动化领域,目的是通过规则化和流程化的方式提升工作效率,降低...

    java_io 流介绍

    ### Java IO 流介绍 #### 一、Java IO 流概述 Java IO(Input/Output)流是Java中用于处理输入输出操作的核心组件之一。它主要用于处理数据的读写操作,包括从文件、网络等来源读取数据以及将数据写入文件、网络等...

    JBPM4工作流介绍.ppt

    JBPM4工作流介绍 本篇文章将对JBPM4工作流进行详细的介绍,涵盖工作流的概念、工作流引擎、工作流管理系统等方面的知识点。 一、工作流的概念 工作流是指在一个工作群组中,为了达成某一个共同目的而需要多人协力...

    c++之第六输入输出流介绍

    "C++之第六输入输出流介绍"可能是指一系列关于C++输入输出流的深入讲解,特别是第六个重要的主题或概念。虽然提供的描述没有具体说明这一主题,但我们可以基于C++的IO流体系来探讨相关的知识点。 首先,C++中的I/O...

    SAP工作流介绍.ppt

    SAP 工作流介绍 SAP 工作流是指在企业中自动化业务流程的电子化流程,旨在提高业务效率、降低成本和提高服务质量。工作流可以帮助企业实现业务流程的自动化、标准化和优化。 工作流的概念可以追溯到20世纪80年代,...

    SAP工作流介绍.pptx

    SAP工作流介绍.pptx

    oracle工作流介绍PPT教案.pptx

    oracle工作流介绍PPT教案.pptx

    jbpm工作流介绍 ppt

    jbpm 的工作流介绍,来和大家一起分享,希望对大家有用,谢谢!

    jira工作流介绍

    本文将详细介绍Jira工作流的原理和相关知识点,以帮助用户更好地理解并应用这一强大功能。 首先,工作流是指一个问题在项目管理中经历的生命周期的各个阶段和步骤,它是实际业务处理流程的抽象表示。在Jira中,工作...

    Easyflow工作流介绍PPT学习教案.pptx

    Easyflow工作流介绍PPT学习教案.pptx

    通达OA2010版工作流介绍.ppt

    通达OA2010版工作流介绍.ppt

    瀑布流介绍

    瀑布流介绍。包含各大主流网站

    JBPM工作流介绍.ppt

    简要介绍工作流的历史和jbpm工作流的处理流程,可供入门浏览需要

    PS流和TS流介绍1

    PS流和TS流是MPEG2系统标准中的两种不同封装方式,主要用于音频和视频数据的存储和传输。这两种流在MPEG2 ISO/IEC-13818标准第一部分“系统”中被定义,旨在提供MPEG2编码比特流的组织结构。 **PS流(Program ...

    图割算法汇总及网络流介绍

    本文将详细介绍这两个概念,并结合福特-富克逊算法和圈算法进行阐述。 首先,图割算法是一种在图论中寻找最优分割的方法,常用于图像分割和机器学习中的分类问题。在图像处理中,它可以帮助将图像分成两个或者多个...

Global site tag (gtag.js) - Google Analytics