`
tdmlxq
  • 浏览: 39114 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

流与文件之学习笔记

    博客分类:
  • JAVA
阅读更多

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 文件的代码:

 

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

 

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.    文件加锁机制是依赖于操作系统的。所以应该避免使用文件夹锁。

分享到:
评论
8 楼 treemap 2011-05-09  
很多人 都自认为不是菜鸟? 你真的都熟悉 楼主说的这些内容吗
也就是用到的时候才去google的吧,
7 楼 Jazag.van 2011-05-09  
恩 感谢LZ,最近正在学习IO相关的。
6 楼 xici_magic 2011-05-07  
很基础的支持 就当再复习一遍啊
5 楼 kaowww153 2011-05-06  
建议je开一个菜鸟专区和一个大牛专区。
4 楼 Caedmon 2011-05-06  
精神是可嘉的,可是你不知道JE很多人都是大牛么?已经七票新手帖了。。
3 楼 royboy 2011-05-06  
不错,很受用
2 楼 Java_Tony 2011-05-06  
很好,看到了一些平常用得不多的知识。谢谢LZ
1 楼 332946505 2011-05-05  
LZ介绍的还挺详细的..
学习了不少东西,谢谢

相关推荐

    工作流引擎jbpm学习笔记

    工作流引擎jbpm学习笔记 jbpm是一个专业的工作流引擎,用于定义、管理和执行业务流程。它可以帮助我们简化工作流程的开发和维护,提高工作效率和可扩展性。 一、什么是公文流转? 公文流转是指公文在定义流转中的...

    文件IO学习笔记

    本篇学习笔记将深入探讨文件I/O的基本概念、常见API、操作模式以及一些实用技巧,旨在帮助初学者快速入门。 首先,我们来了解一下什么是文件I/O。在计算机系统中,文件I/O是指应用程序通过操作系统提供的接口,与...

    软件设计学习笔记之数据流图

    - **数据存储(开口矩形或两条平行横线)**:表示数据的静态存储位置,如数据库、文件或内存。 - **数据流(箭头)**:指示数据的流向,表示数据从一个元素传递到另一个元素的过程。 2. **设计原则与要点**: - ...

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    LabVIEW学习笔记 LabVIEW学习笔记

    ### LabVIEW学习笔记知识点梳理 #### 一、调试技巧与数据监测 - **探针工具**: 在调试过程中,可以通过右键菜单中的`probe`和`custom probe`功能来设置探针,用于实时监测数据流。这有助于理解数据如何在各个节点...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    JAVA学习笔记 林信良

    此外,《JAVA学习笔记》还涵盖了集合框架,包括ArrayList、LinkedList、HashSet、HashMap等各种集合类的使用,以及泛型、迭代器和流API的应用。这些内容对于处理数据和实现复杂算法至关重要。 对于多线程编程,书中...

    java学习笔记markdown

    4. **IO流**:介绍输入/输出流的概念,包括文件操作、字节流、字符流、对象序列化等。这部分内容涉及数据的读写和传输。 5. **网络编程**:讲解Socket编程,如何创建客户端和服务器进行网络通信,以及HTTP、HTTPS...

    Java学习笔记——良葛格

    文件I/O操作在任何编程中都必不可少,Java的IO流系统提供了一套完整的输入输出处理机制,包括字节流和字符流,以及文件、网络和内存的输入输出操作。 最后,笔记可能会涵盖一些实用的Java库,如集合框架(ArrayList...

    Java入门学习笔记

    "Java入门第二季学习笔记"可能深入到更复杂的主题,如异常处理、集合框架、IO流和线程。异常处理是Java中处理错误的重要机制,使得程序更加健壮。集合框架包括ArrayList、LinkedList、HashSet、HashMap等数据结构,...

    工作流学习笔记

    工作流学习笔记主要聚焦在企业级业务流程管理(Business Process Management, BPM)系统,特别是针对JBoss提供的开源工作流框架JBOSS jBPM。jBPM是一个强大的工作流引擎,它允许开发者定义、执行和管理工作流程。这...

    P143~146C++文件操作学习笔记.docx

    C++文件操作学习笔记 文件操作是C++编程中的一种重要操作,通过文件可以将数据持久化。C++中对文件操作需要包含头文件。 文件类型分为两种: 1. 文本文件:文件以文本的ASCII码形式存储在计算机中。 2. 二进制...

    Java JDK 7学习笔记 PDF

    这个PDF学习笔记是开发者深入理解JDK 7特性和功能的重要参考资料。以下是对Java JDK 7的一些核心知识点的详细阐述: 1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过...

    非常详细javaSE学习笔记.rar

    这份“非常详细JavaSE学习笔记.rar”压缩包显然是一份全面的Java SE学习资源,包含了从基础知识到高级特性的全方位讲解。下面,我们将详细探讨这份笔记可能涵盖的关键知识点。 1. **Java起源与环境搭建**:笔记可能...

    MyBatis学习笔记1

    这篇学习笔记可能涵盖了MyBatis的基础概念、配置、映射文件、动态SQL以及其实现数据持久化的各种机制。 首先,MyBatis的核心是XML或注解形式的映射文件,它定义了SQL语句、参数和结果映射。在映射文件中,我们可以...

    java IO流学习笔记

    ### Java IO流学习笔记 #### 异常处理与IO流操作 在进行Java IO流的学习过程中,异常处理是非常重要的一个方面。本节将详细介绍如何在Java中处理异常,并结合具体的IO流操作进行说明。 #### 一、异常处理 在Java...

    Java学习笔记(源码)

    3. **异常处理**:Java的异常处理机制是其强大的特性之一,学习笔记会讲解如何使用try-catch-finally语句块来捕获和处理程序运行时可能出现的错误。 4. **集合框架**:Java集合框架是存储和操作对象的重要工具,...

    良葛格JAVA 学习笔记

    5. **IO流与NIO**:讲解文件操作、输入输出流、缓冲流、对象流以及Java NIO(New Input/Output)的新特性。 6. **线程与并发**:探讨线程的基本概念、创建与管理,同步机制(如synchronized关键字、wait()、notify...

    Java学习笔记整理

    这些学习笔记将带你深入了解Java的核心概念,特别是面向对象编程和集合框架。以下是对每个文件内容的详细阐述: 1. **Day0804_HashMap的基本使用.docx**:HashMap是Java集合框架中的一个重要组件,它提供了键值对的...

Global site tag (gtag.js) - Google Analytics