`

JAVA中I/O流的应用

 
阅读更多

JAVA中I/O流的应用

一、输入流:

1.1. 缓冲的输入文件
为打开一个文件以便输入,需要使用一个FileInputStream,同时将一个String或File对象作为文件名使用。为提高速度,最好先对文件进行缓冲处理,从而获得用于一个BufferedInputStream的构建器的结果句柄。为了以格式化的形式读取输入数据,我们将那个结果句柄赋给用于一个DataInputStream的构建器。DataInputStream是我们的最终(final)对象,并是我们进行读取操作的接口。
在这个例子中,只用到了readLine()方法,但理所当然任何DataInputStream方法都可以采用。一旦抵达文件末尾,readLine()就会返回一个null(空),以便中止并退出while循环。
“String s2”用于聚集完整的文件内容(包括必须添加的新行,因为readLine()去除了那些行)。随后,在本程序的后面部分中使用s2。最后,我们调用close(),用它关闭文件。从技术上说,会在运行finalize()时调用close()。而且我们希望一旦程序退出,就发生这种情况(无论是否进行垃圾收集)。然而,Java 1.0有一个非常突出的错误(Bug),造成这种情况不会发生。在Java 1.1中,必须明确调用System.runFinalizersOnExit(true),用它保证会为系统中的每个对象调用finalize()。然而,最安全的方法还是为文件明确调用close()。

1.2. 从内存输入
这一部分采用已经包含了完整文件内容的String s2,并用它创建一个StringBufferInputStream(字串缓冲输入流)——作为构建器的参数,要求使用一个String,而非一个StringBuffer)。随后,我们用read()依次读取每个字符,并将其发送至控制台。注意read()将下一个字节返回为int,所以必须将其造型为一个char,以便正确地打印。

1.3. 格式化内存输入
StringBufferInputStream的接口是有限的,所以通常需要将其封装到一个DataInputStream内,从而增强它的能力。然而,若选择用readByte()每次读出一个字符,那么所有值都是有效的,所以不可再用返回值来侦测何时结束输入。相反,可用available()方法判断有多少字符可用。下面这个例子展示了如何从文件中一次读出一个字符:
二、输入流:

2.1. 保存与恢复数据
PrintStream能格式化数据,使其能按我们的习惯阅读。但为了输出数据,以便由另一个数据流恢复,则需用一个DataOutputStream写入数据,并用一个DataInputStream恢复(获取)数据。当然,这些数据流可以是任何东西,但这里采用的是一个文件,并进行了缓冲处理,以加快读写速度。
注意字串是用writeBytes()写入的,而非writeChars()。若使用后者,写入的就是16位Unicode字符。由于DataInputStream中没有补充的“readChars”方法,所以不得不用readChar()每次取出一个字符。所以对ASCII来说,更方便的做法是将字符作为字节写入,在后面跟随一个新行;然后再用readLine()将字符当作普通的ASCII行读回。
writeDouble()将double数字保存到数据流中,并用补充的readDouble()恢复它。但为了保证任何读方法能够正常工作,必须知道数据项在流中的准确位置,因为既有可能将保存的double数据作为一个简单的字节序列读入,也有可能作为char或其他格式读入。所以必须要么为文件中的数据采用固定的格式,要么将额外的信息保存到文件中,以便正确判断数据的存放位置。

2.2. 读写随机访问文件
正如早先指出的那样,RandomAccessFile与IO层次结构的剩余部分几乎是完全隔离的,尽管它也实现了DataInput和DataOutput接口。所以不可将其与InputStream及OutputStream子类的任何部分关联起来。尽管也许能将一个ByteArrayInputStream当作一个随机访问元素对待,但只能用RandomAccessFile打开一个文件。必须假定RandomAccessFile已得到了正确的缓冲,因为我们不能自行选择。
可以自行选择的是第二个构建器参数:可决定以“只读”(r)方式或“读写”(rw)方式打开一个RandomAccessFile文件。
使用RandomAccessFile的时候,类似于组合使用DataInputStream和DataOutputStream(因为它实现了等同的接口)。除此以外,还可看到程序中使用了seek(),以便在文件中到处移动,对某个值作出修改。

3 快捷文件处理
由于以前采用的一些典型形式都涉及到文件处理,所以大家也许会怀疑为什么要进行那么多的代码输入——这正是装饰器方案一个缺点。本部分将向大家展示如何创建和使用典型文件读取和写入配置的快捷版本。
3.1. 快速文件输入
若想创建一个对象,用它从一个缓冲的DataInputStream中读取一个文件,可将这个过程封装到一个名为InFile的类内。

 

 

http://blog.sina.com.cn/s/blog_5f044a740100dbd9.html

分享到:
评论

相关推荐

    java基础之I/O流

    Java中的I/O流是程序与外部数据交互的重要机制,它允许数据在程序、文件、网络等之间流动。I/O流分为两大类:字符流(Character Stream)和字节流(Byte Stream),每类又分为输入流(Input Stream)和输出流...

    Java 新I/O

    Java 新I/O,也称为NIO(New Input/Output),是Java平台中对传统I/O模型的一种改进。在Java 1.4版本中引入的NIO库为开发人员提供了更高效、非阻塞的数据处理方式,特别适用于高并发、低延迟的系统。NIO的核心在于...

    java阻塞i/o与非阻塞i/o控制

    了解并熟练掌握这两种I/O模型,有助于开发者编写出高效、可扩展的Java应用程序,特别是在网络编程和服务器开发中,非阻塞I/O能够带来显著的性能提升。因此,深入学习和实践Java中的阻塞I/O与非阻塞I/O控制是非常必要...

    Java I/O流通讯录

    在Java中,I/O流用于处理数据的输入和输出,包括从键盘、文件、网络等源获取数据,以及将数据发送到显示器、打印机、文件或其他目的地。Java I/O流分为字符流和字节流两大类,分别处理文本和二进制数据。在这个...

    关于I/O流读写文件

    在Java中,I/O流是通过流的概念来实现的,流是一种抽象表示,用于表示输入设备或输出设备。根据不同的功能,I/O流可以分为输入流和输出流两种。 输入流 输入流是用于读取数据的流,常用的输入流有InputStream、...

    Java I/O, 2nd Edition

    8. **案例研究**:提供了一些实际应用示例,帮助读者理解如何在实际项目中应用Java I/O技术。 9. **错误处理和调试**:讲述了在处理I/O异常时的最佳实践,如何有效地捕获和处理错误,以及如何调试I/O相关的问题。 ...

    Java I/O, NIO and NIO.2

    在实际应用中,Java I/O适用于简单的文件读写和网络通信,而NIO和NIO.2更适合于需要高并发和低延迟的场景,如服务器开发。理解并熟练掌握这些技术,可以帮助开发者构建出更高效、更稳定的系统。 总的来说,Java I/O...

    Java I/O系统

    在Java I/O中,还有缓冲流(Buffered Streams)和装饰器模式的应用。例如,`BufferedReader`和`BufferedWriter`通过在实际读写操作之前存储数据,提高了读写性能。装饰器模式则允许在不改变原有类结构的基础上,动态...

    Java课程设计报告书-学生版-1_I/O流与文件课程设计_

    本课程设计报告书——“Java课程设计报告书-学生版-1_I/O流与文件课程设计_”旨在帮助学生深入理解并掌握如何在Java中进行文件操作,通过实际的实验案例来学习文件对象和流类的应用。 一、Java I/O流概述 Java的I/O...

    Java I/O详细笔记

    Java I/O系统主要涉及四种基本的流分类方式:根据数据流动的方向、数据处理的类型、流处理的源以及是否使用了缓冲机制。 **1. 按数据流动方向** - **输入流(Input Stream)**:主要用于从某个数据源中读取数据,...

    Java使用I/O流读取文件内容的方法详解

    Java使用I/O流读取文件内容的方法详解 Java使用I/O流读取文件内容的方法是...在实际应用中,I/O流可以用于各种文件读取和写入操作,如读取配置文件、写入日志文件等。因此,掌握I/O流的使用是Java编程的重要技能。

    android 快速的搜索手机文件引擎 java I/O的应用

    4. **Java I/O在搜索中的应用** - 使用File类获取目录信息,如File.list()列出目录中的所有文件。 - FileFilter和FilenameFilter接口可定制文件筛选规则,如按扩展名、大小等条件过滤。 - 使用DirectoryStream类...

    Java I/O总结

    5. **装饰者模式的应用**:在Java I/O中,装饰者模式被广泛应用于构建复杂的流管道,如上文中提到的`BufferedReader`就是一个典型的例子,它装饰了一个`InputStreamReader`,后者又装饰了一个`InputStream`。...

    Java的I_O处理技术探析.pdf

    Java的I/O处理技术是Java编程语言中的一种重要技术,用于处理输入和输出的数据流。Java中使用流(Stream)的形式来处理数据,流是一组有顺序的、有起点的、有终点的字节集合,是对输入和输出的总称和抽象。 在Java...

    Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O

    Java的可移植性使得它在各种设备和应用中得到广泛应用。它可以用于开发桌面应用程序、移动应用程序、Web应用程序、嵌入式系统等。由于Java的高性能和稳定性,许多大型企业和互联网公司选择使用Java开发核心业务系统...

    Java I/O 使用和最佳实践

    Java I/O系统是Java编程语言中的一个核心组成部分,它提供了处理输入输出操作的类和接口。这个系统的设计目的是为了使得应用程序能够与外部世界交互,包括读取和写入文件、网络数据、标准输入输出流等。在Java中,I/...

    JavaIO 2nd Edition PDF

    1. **所有I/O类和相关类的覆盖**:全面介绍Java I/O系统中的各类流和其他相关组件,帮助读者理解各种流的工作原理和应用场景。 2. **深入讲解Java的数字格式化设施**:详细介绍Java如何处理数值数据的格式化,包括...

    Java文件输入输出(I/O)流.pdf

    以上就是关于Java文件输入输出(I/O)流的基本介绍和应用示例,Java的I/O库提供了丰富的类和方法来处理各种复杂的文件操作需求。在实际开发中,还需要根据具体情况选择合适的流类型,确保数据的正确传输和程序的高效...

    MaglevIO,一个易于使用和高效的Java I/O库。基于Java NATEVEIO。.zip

    MaglevIO是一个专注于提供易用性和高性能的Java I/O库,其设计灵感来源于Java的非阻塞I/O(Non-blocking I/O,NIO)框架。NIO是Java平台中一个重要的部分,它允许程序在处理大量并发连接时显著提高效率,尤其是在...

    探索Java I/O 模型的演进

    1. **传统Java I/O(基于流的I/O)**:Java早期的I/O库基于InputStream和OutputStream,这些类采用阻塞I/O模型,如FileInputStream和FileOutputStream。 2. **NIO(Non-blocking I/O)**:Java 1.4引入了NIO(New I/...

Global site tag (gtag.js) - Google Analytics