`
啸笑天
  • 浏览: 3436377 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

Java IO复习

    博客分类:
  • java
 
阅读更多


什么是流:

 

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

 

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

 

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

 

字节流处理概述:

 

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

 

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

 

Java代码 复制代码
  1. read();   
  2. read(byte[] b) ;   
  3. read(byte[] b, int off, int len) ;  
Java代码   收藏代码
  1. read();  
  2. read(byte[] b) ;  
  3. read(byte[] b, int off, int len) ;  

 

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

 

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

 

Java代码 复制代码
  1. write(int b);   
  2. write(byte[] b);   
  3. write(byte[] b, int off, int len)   
Java代码   收藏代码
  1. write(int b);  
  2. write(byte[] b);  
  3. 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代码 复制代码
  1. read(char[] cbuf);   
  2. read(char[] cbuf, int off, int len);   
  3. read(CharBuffer target);  
Java代码   收藏代码
  1. read(char[] cbuf);  
  2. read(char[] cbuf, int off, int len);  
  3. read(CharBuffer target);  

 

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

 

Writer提供的重要方法有:

 

Java代码 复制代码
  1. write(char[] cbuf);   
  2. write(char[] cbuf, int off, int len);   
  3. write(int c);   
  4. write(String str);   
  5. write(String str, int off, int len);  
Java代码   收藏代码
  1. write(char[] cbuf);  
  2. write(char[] cbuf, int off, int len);  
  3. write(int c);  
  4. write(String str);  
  5. 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代码 复制代码
  1. is = new BufferedInputStream(new FileInputStream("res/input.data"));   
  2. assertTrue(is.available() > 0);   
  3. assertTrue(is.markSupported());   
  4.   
  5. // The read limit has no effect.   
  6. is.mark(0);   
  7.   
  8. int first = is.read();   
  9. int second = is.read();   
  10.   
  11. is.reset();   
  12. int firstAgain = is.read();   
  13. int secondAgain = is.read();   
  14.   
  15. assertEquals(first, firstAgain);   
  16. assertEquals(second, secondAgain);  
Java代码   收藏代码
  1. is = new BufferedInputStream(new FileInputStream("res/input.data"));  
  2. assertTrue(is.available() > 0);  
  3. assertTrue(is.markSupported());  
  4.   
  5. // The read limit has no effect.  
  6. is.mark(0);  
  7.   
  8. int first = is.read();  
  9. int second = is.read();  
  10.   
  11. is.reset();  
  12. int firstAgain = is.read();  
  13. int secondAgain = is.read();  
  14.   
  15. assertEquals(first, firstAgain);  
  16. assertEquals(second, secondAgain);  

 

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

 

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

感谢:http://www.iteye.com/topic/313635

 

  • 大小: 54.2 KB
分享到:
评论

相关推荐

    Java中文件IO流.pdf

    Java中文件IO流.pdf 学习资料 复习资料 教学资源

    Java IO期末复习||五类一接口

    Java IO五类一接口 文件操作类File、RandomAccessFile 字节输出流OutputStream、字节输入流InputStream 字符输出流Writer、字符输入流Reader 打印流、输入输出重定向 Scanner类 字符编码 序列化操作标识接口...

    Java IO.rar_java

    IO总结资料 有助于对 Java io 部分知识的复习回顾

    Java的IO.xmind

    javaIO的复习总结思维导图,javaIO的复习总结思维导图

    Java IO, NIO and NIO.2

    这是一本介绍java io以及nio相关知识的书,书中对知识的讲解通俗易懂,是学习java nio以及复习java io相关知识的必备书籍。注意:本书为英文版!!!

    java IO 流浅谈

    最近学了java IO流 是个比较绕的东西,有时候很难理清它的头绪,即使当时清楚了,过一段时间后也会忘记,因此记录下来IO流中常用的几个类,以供大家参考,及本人以后复习

    607.605.JAVA基础教程_IO流与网络编程-复习:IO流概述(607).rar

    607.605.JAVA基础教程_IO流与网络编程-复习:IO流概述(607).rar

    java复习提纲 短小精悍

    java复习提纲,内含java io、多线程、网络、异常处理等

    java期末复习第讲面向对象程序设计.pptx

    java.io----包含能提供多种输入/输出功能的类。 java.util----包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。 第8页/共41页 java期末复习第讲面向对象程序设计全文共41页,当前为第8页。 2023年5...

    Java复习笔记/Java知识点总结

    这里面由我自己总结的一些Java知识点。 同时附赠一份我学习的资料,是github上的一位大神写...总结了Java知识、IO、http、socket、redis、git、docker,设计层次比较全,大家可以下载看看,注意文档格式是markdown的。

    Java工程师面试复习指南

    JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 继承封装多态的实现原理 集合类 Java集合类总结 Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合...

    Java编程复习代码

    大四学期复习Java基础所产生的代码笔记,着重回顾了字符串、IO、线程以及socket套接字编程,在每一分代码中都附带了自己编程时的一些认识、笔记。适合Java基础不够踏实的童鞋。

    Java 复习.xmind

    数据结构,面向对象,反射,IO流,NIO,IO多路复用,JVM,并发.....

    Java 软件开发复习提纲.pdf

    java基础复习 反射、io流

    java IO流文件详例

    io流是任何一门语言中都非常重要的技术,繁琐的课本介绍非但不能够解决问题,还会造成很多的混淆 该文件将各个io流功能放到一起呈现,方便新手对比学习,当场实践,也方便老手进行全面的复习回顾。简洁易懂、涵盖...

    Java期末重点复习(2)

    BIT-刘滨老师的Java期末重点复习Demo第二弹 与其说是复习,不如说是从头开始学hhhh 其他细节看第一辑,这次的内容主要是: ①接口类 ②泛型(类、方法) ③匿名内部类和Lambda ④Collection 关于资源的内容,主要是...

    Java复习题及答案

    import java.io.*; class TestIO { public static void main(String[] args) { try{ RandomAccessFile raf=new RandomAccessFile("test.dat","r"); int i=raf.readInt(); } catch(IOException e){System....

    《Java基础复习》—常识与入门

    突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn 《Java基础复习》—常识与入门 一、Java语言的知识体系图 分为三部分 编程语言核心结构:变量、基本语法、分支、循环、数组 ...

    java72-java-advance.rar

    a)java.sql b) java.util c) java.math d) java.io 2.不属于java.io包中的接口的一项是(C) a)DataInput b) DataOutput c) DataInputStream d) ObjectInput 3. ByteArrayOutputStream将下列哪一项作为输出流 C a)...

Global site tag (gtag.js) - Google Analytics