- 浏览: 71015 次
- 性别:
- 来自: 安徽省
文章分类
最新评论
-
di1984HIT:
真心学习了,不错。
Java编程中“为了性能”需做的26件事 -
di1984HIT:
context上面有个属性控制吧。
tomcat 不能自动解压war包问题 -
di1984HIT:
没用过试验一下。
double 加法计算 -
di1984HIT:
学习了,不错。
PHP 中& & 与 || 的区别 -
306963591:
我理解Java中的引用传递是传递对象的地址
Java 引用传递与值传递
什么是流:
流是一个抽象的概念,当java程序需要从数据源读取数据时,会开启一个到数据源的流。数据源可以是文件,内存或者网络等。同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件,内存或者网络等。流的创建是为了更方便地处理数据的输入输出。
流分为字节流和字符流。字节流也称为原始数据,需要用户读入后进行相应的编码转换。而字符流的实现是基于自动转换的,读取数据时会把数据按照JVM的默认编码自动转换成字符。
字节流由InputStream和OutputStream处理,而字符流由Reader和Writer处理。Reader和Writer是Java后加入的处理类,处于让数据的处理更方便的目的。
字节流处理概述:
对于字节流处理的类都继承自InputStream和OutputStream这两个抽象类。
InputStream提供的最重要的方法是:
read(); read(byte[] b) ; read(byte[] b, int off, int len) ;
用于从输入流中读取字节。
OutputStream提供的最重要的方法是:
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进行顺序处理。
输出流:
基本上每个输入流都有一个相应的输出流类,提供相应的输出流处理。
同样,跟数据目的地直接接触的类有:FileOuputStream和ByteArrayOutputStream,前者实现了把数据流写入文件的功能,后者实现了一个输出流,其中的数据被写入了一个byte数组。缓冲区会随着数据的不断写入而自动增长。可使用toByteArray()和toString()获取数据。
下面对其它的装饰类做一下简单介绍:
BufferedOutputStream:提供了缓冲功能的输出流,在写出完成之前要调用flush来保证数据的输出。
DataOutputStream:数据输出流允许应用程序以适当方式将基本java数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
PipedOutputStream:允许以管道的方式来处理流。可以将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。通常,数据由某个线程写入PipedOutputStream对象,并由其他线程从连接的PipedInputStream读取。
PrintStream:为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。我们经常用到的System.out或者System.err都是PrintStream。
字符流处理概述:
所有的字符流操作类都继承自Reader或者Writer这两个抽象类。
Reader提供的重要方法有:
read(char[] cbuf); read(char[] cbuf, int off, int len); read(CharBuffer target);
他们提供了从流中读取数据到字符数组或者CharBuffer的功能。
Writer提供的重要方法有:
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用于重复读取某段的数据,如下代码
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(): 关闭流并释放与之关联的所有系统资源。
转载:http://www.iteye.com/topic/313635
发表评论
-
Java 集合 Stack、Queue、Map插入、移除和遍历
2013-02-22 14:55 53181、Stack 操作 // Stack 类表示后进先出 ... -
Java 集合 ArrayList和LinkedList的区别
2013-02-22 13:48 885一般大家都知道ArrayList和LinkedList的大致 ... -
Java几款性能分析工具的对比
2013-02-21 14:24 754在给客户进行应用程序维护的过程中,我注意到一些关于高负载条件 ... -
Java编程中“为了性能”需做的26件事
2013-02-21 14:16 856最近的机器内存又爆满 ... -
Java 引用传递与值传递
2013-02-21 12:02 1284总结: 我理解Java中的引用传递是传递对象的地址。 ... -
Java 基本数据类型
2013-02-21 11:21 1021数据类型 大小 范围 默认值 byte ... -
Spring 源码下载及编译
2012-09-13 00:41 2260svn下载https://github.com/Spr ... -
Spring 源码编译 出错FAILURE: Build failed with an exception.
2012-09-13 00:01 4342编译过程中出现如下错误 FAILURE: Bui ... -
double 加法计算
2011-12-13 09:24 1502/* * @(#) Test.java 1.0 2 ... -
findbugs 出错类型及对应解释
2011-11-01 10:13 2359findbugs 出错类型及对应解释1、Dead sto ... -
Java集合类
2011-09-05 15:22 1081Java集合类 1.Java的集合类是一个特别有用的集合类,可 ... -
Java编程中影响性能的一些特点
2011-08-31 09:03 646文中将提供一些在Java编程中影响性能的一些特点,为了能够提高 ... -
JDK与JRE的区别
2011-08-24 08:39 818很多程序员已经干了一 ... -
java 获取路径
2011-08-03 17:34 6071、利用System.getProperty()函数获取当 ... -
简单工厂模式的例子
2011-07-27 09:46 816本示例简单的实现了工 ... -
简单spring aop 例子
2011-07-21 15:35 886最近比较空闲,于是看了spring方面的知识,看到spring ... -
FileSystemXmlApplicationContext与ClassPathXmlApplicationContext读取文件目录区别
2011-07-20 17:50 909只为做个笔记 FileSystemXmlApplica ... -
超级简单Spring3 Quartz 例子
2011-07-20 11:28 2077关于Spring Quartz 我就不多介绍,因为小弟是个菜鸟 ... -
求java动态代理例子
2011-06-21 09:29 560希望大家可以给我讲解一些java动态代理原理及例子说明,谢谢 -
Java NIO API详解
2011-05-11 16:34 979在JDK 1.4以前,Java的IO操作集中在java. ...
相关推荐
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教程之javaIO详解Java教程之javaIO详解Java教程之javaIO详解
java IO
2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。
java io 结构图java io 结构图
1、Java IO_NIO 2、Java+IO.pdf
JAVA课件Java IO.ppt详细了解JAVA
java IO操作详细解释 清华大学java io专用教材
Java IO流详解
java零基础自学 之 JavaIO流处理java零基础自学 之 JavaIO流处理
java IO(下)
java io 文件读写
个人给应届生培训用的讲义,主要是以Java IO为主题,包括IO的基本概念、IO模型、Java BIO ,NIO, NIO2。分享下
适合初学者练手.在了解 javaIO理论知识的基础上进一步巩固和深入了解
java IO流学习笔记
java io.pdf java io.pdf
java io处理 方法java io处理 方法
IO 简介,只看这篇,IO全部搞定,对于初学者来说,不可多得
Java io流的总结
收集了Java IO 文件读写等操作的实例