`

java io(1)

    博客分类:
  • JAVA
阅读更多
什么是流:

流是一个抽象的概念。当Java程序需要从数据源读取数据时,会开启一个到数据源的流。数据源可以是文件,内存或者网络等。同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件、内存或者网络等。流的创建是为了更方便地处理数据的输入输出。

流分为字节流和字符流。字节流也称为原始数据,需要用户读入后进行相应的编码转换。而字符流的实现是基于自动转换的,读取数据时会把数据按照JVM的默认编码自动转换成字符。

字节流由InputStream和OutputStream处理,而字符流由Reader和Writer处理。Reader和Writer是Java后加入的处理类,出于让数据的处理更方便的目的。

字节流处理概述:

对于字节流处理的类都继承自InputStream和OutputStream这两个抽象类。

InputStream提供的最重要的方法是:

Java代码  收藏代码
read(); 
read(byte[] b) ; 
read(byte[] b, int off, int len) ; 

用于从输入流中读取字节。

OutputStream提供的最重要的方法是:

Java代码  收藏代码
write(int b); 
write(byte[] b); 
write(byte[] b, int off, int len)  

用于将字节写入输出流。

字节流处理类概述:

字节流的处理类有很多,他们都继承自InputStream或者OutputStream抽象类。

输入流:

先谈谈输入流,输入流中跟数据源直接接触的类有:FileInputStream和ByteArrayInputStream,他们分别实现了从文件或者内存中的字节数组读入数据到输入流。

其他的输入流处理类都是装饰类(Decorator模式),下面对他们进行一下简单介绍:

BufferedInputStream: 提供了缓冲功能。
DataInputStream: 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
PipedInputStream: 允许以管道的方式来处理流。当连接到一个PipedOutputStream后,它会读取后者输出到管道的数据。
PushbackInputStream: 允许放回已经读取的数据。
SequenceInputStream: 能对多个inputstream进行顺序处理。

输出流:

基本上每个输入流类都有一个相应的输出流类,提供相应的输出流处理。
同样,跟数据目的地直接接触的类有:FileOutputStream和ByteArrayOutputStream,前者实现了把数据流写入文件的功能,后者实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。

下面对其它的装饰类做一下简单介绍:
BufferedOutputStream: 提供了缓冲功能的输出流,在写出完成之前要调用flush来保证数据的输出。
DataOutputStream: 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
PipedOutputStream: 允许以管道的方式来处理流。可以将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。通常,数据由某个线程写入 PipedOutputStream 对象,并由其他线程从连接的 PipedInputStream 读取。
PrintStream: 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。我们经常用到的System.out或者System.err都是PrintStream。

字符流处理概述:

所有的字符流操作类都继承自Reader或者Writer这两个抽象类。

Reader提供的重要方法有:

Java代码  收藏代码
read(char[] cbuf); 
read(char[] cbuf, int off, int len); 
read(CharBuffer target); 

他们提供了从流中读取数据到字符数组或者CharBuffer的功能。

Writer提供的重要方法有:

Java代码  收藏代码
write(char[] cbuf); 
write(char[] cbuf, int off, int len); 
write(int c); 
write(String str); 
write(String str, int off, int len); 

他们提供了把字符、字符数组或者字符串写入流中的功能。

字符流处理类概述:

输入流:

跟数据源直接接触的类:
CharArrayReader: 从内存中的字符数组中读入数据,以对数据进行流式读取。
StringReader:从内存中的字符串读入数据,以对数据进行流式读取。
FileReader:从文件中读入数据。注意这里读入数据时会根据JVM的默认编码对数据进行内转换,而不能指定使用的编码。所以当文件使用的编码不是JVM默认编码时,不要使用这种方式。要正确地转码,使用InputStreamReader。

装饰类:
BufferedReader:提供缓冲功能,可以读取行:readLine();
LineNumberReader: 提供读取行的控制:getLineNumber()等方法。
InputStreamReader: 字节流通向字符流的桥梁:它使用指定的 charset
读取字节并将其解码为字符。

输出流:

根数据目的相关的类:
CharArrayWriter:把内存中的字符数组写入输出流,输出流的缓冲区会自动增加大小。输出流的数据可以通过一些方法重新获取。
StringWriter: 一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。
FileWriter:把数据写入文件。

装饰类:
BufferedWriter:提供缓冲功能。
OutputStreamWriter:字符流通向字节流的桥梁:可使用指定的 charset
将要写入流中的字符编码成字节。
PrintWriter: 向文本输出流打印对象的格式化表示形式。

流处理中的其它方法:

mark和reset用于重复读取某段的数据,如下代码:

Java代码  收藏代码
is = new BufferedInputStream(new FileInputStream("res/input.data")); 
assertTrue(is.available() > 0); 
assertTrue(is.markSupported()); 
 
// The read limit has no effect. 
is.mark(0); 
 
int first = is.read(); 
int second = is.read(); 
 
is.reset(); 
int firstAgain = is.read(); 
int secondAgain = is.read(); 
 
assertEquals(first, firstAgain); 
assertEquals(second, secondAgain); 

Writer或者OutputStream中的flush(): 刷新该流的缓冲,用于确保数据的输出。

close(): 关闭流并释放与之关联的所有系统资源。
分享到:
评论

相关推荐

    java IO教程,java IO教程,java IO教程

    java IO教程,java IO教程,java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程,java IO教程,java IO教程,java IO...

    Java IO应届生培训讲义

    Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的BIO、NIO和AIO高级IO类库。下面详细解释这些知识点: 1. 用户空间和内核空间 ...

    java IO.chm

    Java IO中的Charset类提供了处理字符编码的工具,例如ISO-8859-1、UTF-8等。开发者可以通过Charset类进行字符编码和解码,确保数据在不同的系统和环境中正确传输。 六、文件操作 File类是Java IO中处理文件和目录的...

    Java IO知识点

    Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及文件、网络、内存等数据传输。本文将深入探讨Java IO的基本概念、分类、选择流的策略以及常用的流类型。 首先,File类是Java IO的...

    Java教程之javaIO详解

    Java IO 详解 Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File ...

    Java IO_NIO

    1. 阻塞与非阻塞:Java IO是阻塞的,而NIO是非阻塞的,可以在没有数据可读时不做等待,而是继续处理其他任务。 2. 多路复用:NIO的选择器允许单线程管理多个通道,而传统的IO需要为每个连接创建一个新的线程,导致...

    java io 结构图

    文件名"dd16b88f-d8ed-3378-b8a6-1ba319c0ea27.gif"和"eximg.jpeg"可能代表了这个Java IO结构图的图片文件,可以帮助读者直观地理解这个复杂的体系。 总之,Java IO系统为开发者提供了强大而灵活的工具来处理输入...

    java IO流精讲

    IO 简介,只看这篇,IO全部搞定,对于初学者来说,不可多得

    java io流学习笔记1

    Java IO流是Java编程语言中处理输入输出操作的重要部分,尤其在数据传输、文件读写等方面发挥着核心作用。本文将深入探讨Java IO流的基本概念、类型以及它们在实际开发中的应用。 首先,理解IO流的基本概念至关重要...

    Java IO 使用例

    在“JavaIODemo”这个示例中,可能会包含以上提到的一些或全部Java IO操作的代码实例,通过这些实例,我们可以学习如何在实际项目中应用Java IO API。实践是掌握Java IO的最佳方式,通过对这些示例的分析和运行,...

    java io.pdf

    1. **流(Streams)**:Java IO的核心概念是流,它们代表数据的源和目的地。流可以是字节流或字符流,分为输入流和输出流。字节流处理单个字节的数据,而字符流处理Unicode字符,如UTF-8编码。 2. **节点流(Nodal ...

    Java IO处理类的汇总

    Java IO处理类是Java平台中用于输入输出操作的核心部分,它允许程序与各种类型的输入源(如文件、网络连接)以及输出目标(如显示器、打印机)进行交互。本篇文章将全面解析Java IO处理类,包括基本概念、常用类库、...

    java小项目练习IO实现

    在Java编程领域,IO(Input/Output)技术是不可或缺的一部分,尤其在处理数据持久化、文件操作、网络通信等方面发挥着重要作用。在这个“java小项目练习IO实现”中,我们将探讨如何利用Java的IO流来实现本地数据的...

    JavaIO流详解归纳.pdf

    JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    Java IO 编程集合

    1. InputStream与OutputStream:这是Java IO体系中的两大基本接口,分别用于数据的读取和写入。InputStream代表字节输入流,OutputStream代表字节输出流。它们是所有字节流类的基类,包括文件读写的相关类。 二、...

    java io处理 方法

    java io处理 方法java io处理 方法

    IO流 javaio java 流

    Java中的IO流是Java核心库的重要组成部分,它用于在不同数据源之间传输数据。Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又...

    java IO流精讲 JAVA IO流实例开发

    Java IO流是Java平台中用于处理输入/输出操作的核心组件,它允许程序与各种数据源(如文件、网络连接、内存缓冲区等)进行交互。Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符...

Global site tag (gtag.js) - Google Analytics