`
SwordShadow
  • 浏览: 271399 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java IO流总结

    博客分类:
  • java
阅读更多

        Java 流操作的接口

        

说明

File

操作文件的类

RandomAccessFile

随机地读取一个文件中指定位置的数据

InputStream

字节输入流

OutputStream

字节输出流

Reader

字符输入流

Writer

字符输出流

 Java IO流关系图


 

File类

 

在整个IO包中,唯一与文件本身有关的类就是File类。使用File类可以进行创建或删除文件等常用操作

 

流的概念

 

Java中流,简单的说就是字节(byte),可以把它看作是很多很多字节(byte)汇在一起形成的东西,起个名字就叫流,像水滴形成河流一样

 

IO流的分类

 

根据处理数据类型的不同分为:字符流和字节流

 

根据数据流向不同分为:输入流和输出流

 

按处理方式来分:

字节流:按8位传输 InputStream OutputStream

字符流:按16位传输 Reader  Writer

 

按功能来分:

节点流:与文件、网络打交道的流,操作数据的来源

        处理流(包装流):操作节点流

 

如何区分:

       输入流:以InputStream、Reader结尾的流   FileInputStreamBufferedReader

       输出流:以OutputStream、Writer结尾的流  FileOutputStreamPrintWriter

 

字节流:以InputStream、OutputStream结尾的流

 

字符流:以Reader、Writer结尾的流

 

节点流:看构造器,参数为数据来源,参数是String或File之类的

 

 

new FileInputStream("test.txt");
new FileOutputStream(new File("test.txt"))
          

 

 

处理流:构造器的参数为其它流(采用装饰模式)

              

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File()),"UTF-8"));

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File()),"UTF-8"))
   

 

 

选择流时: 首先确定是输入还是输出; 其次确定是字节流还是字符流;然后确定是节点流还是处理流。

 

因为所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按直接的方式存储的,而字符是只有在内存中才会形成,所以开发中,字节流使用较为广泛

 

根据数据类型选择输入/输出流:

byte、byte[]:InputStream / OutputStream

int、byte、char、double、String:DataInputStream / DataOutputStream

       char:StringReader / Writer

       Object:ObjectInputStream / ObjectOutputStream

若考虑性能会在前试着加Buffered

 

InputStream

InputStream 是所有的输入字节流的父类,它是一个抽象类。

 

ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据

 

ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)

 

OutputStream

OutputStream 是所有的输出字节流的父类,它是一个抽象类。

 

ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。

 

PipedOutputStream 是向与其它线程共用的管道中写入数据,ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。

 

字节--字符转换流

OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象

 

InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象

  

 

常用流:

DataInputStream&DataOutputStream 用于读写基本类型数据,如int、float、long、double和boolean等。此外,DataInputStream的readUTF()方法还能读取采用UTF-8字符编码的字符串。

 

BufferedInputStream&BufferedOutputStream  因为利用了缓冲区,所以常用于提高读写数据的效率。

 

BufferedInputStream先把一批数据读入到缓冲区,接下来read方法只需要从缓冲区内获得数据,减少了物理性读取数据的次数。

 

可以使用BufferedInputStream(InputStream in, int size) 中的size来指定缓冲区的大小

 

ObjectOutputStream&ObjectInputStream

 

对象的序列化是指把对象写到一个输出流中,

对象的反序列化是指从一个输入流中读取一个对象。

Java语言要求只有实现了java.io.Serializable接口的类的对象才能序列化和反序列化

 

Reader/Writer

当需要程序读写文本文件,而且文本文件采用特定的字符编码集时,应采用Reader/Writer。

 

InputStreamReader & OutputStreamWriter 桥梁流

把字节流转换成字符流

在桥转换的时候可以指定编解码方式

 

new BufferedReader(new InputStreamReader(new FileInputStream("abc.txt"), "utf8"));
 

 

BufferedReader

readLine()方法可以一次读入一行字符,以字符串形式返回。

 

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("index.html"),"utf-8"));
String content="";
StringBuilder sb = new StringBuilder();
while((content=br.readLine())!=null){
	sb.append(content);
}
 

 

PrintWriter 输出格式化的数据,所有的写数据的方法以print开头。

print (int i)

print (long l)

print (float f)

print (String s)

 

每个print() 方法都有一个println()方法对应

 

 

对象序列化

 

1:定义:把对象作为一个整体,在I/O流中传播

2:语法:

(1)实现了Serializeble接口的对象才能可序列化。这个接口里没有任何方法,没有方法的接口称为标记接口。

例如:class Student implements Serializeble{} 

(2)如果一个序列化后的对象里面有一个属性是个对象属性,那么这个对象属性也需要实现序列化。

例如:class Student implements Serializeble{

     Teacher t;//必须序列化

}

class Teacher implements Serializeble{}

(3)包名、类名、属性可以被序列化

方法、构造器不会序列化

所有的静态属性都不会被序列化

用transient关键字修饰的属性是临时属性,临时属性不参与序列化。 

(4)当父类实现Serializeble接口,子类自动实现。对象序列化会创建对象,不调用构造,但子类实现Serializeble接口,

父类没有实现实现Serializeble接口,父类在反序列化时会调用构造。

 

3:使用注意:

a.用readObject读文件的时候,当文件结束的时候会抛出EOFException,当我们捕获这个异常的时候,程序就结束了。

Object o = null;

while((o =ois.readObject()) != null) {

 

}

b.如果需要向一个文件中追加对象,首先要把文件中原有的对象读出来,再把原有对象和新追加的对象一起写入到文件。

 

c. serialVersionUID是静态常量,表示当前对象的版本号,在接受传输的数据时会自动检查该值,保证版本的相同。

 

java.util.Properties属性类

 

文件名以.properties结尾的文件称为属性文件

文件的内容是:名字=值 的形式

常用方法:

public void load(InputStream inStream)throws IOException

public void store(OutputStream out,String comments)throws IOException

public String getProperty(String key)

public String getProperty(String key,String defaultValue)

public Object setProperty(String key,String value)

 

参考 http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html   

 

        http://xiaorenxinong.iteye.com/blog/411175

 

IO流思维导图下载

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

相关推荐

    Java io流总结

    Java io流的总结

    Java IO流 总结

    Java IO流总结 Java IO流是Java语言中最基本和最重要的输入/输出机制,负责将数据从外部世界输入到Java应用程序中或将数据从Java应用程序输出到外部世界。IO流可以分为两大类:字节流和字符流。 1. 节点流:离数据...

    java Io流总结(毕向东)

    ### Java IO流总结 #### 一、Java IO流概述及概念 **毕向东**老师是一位经验丰富的Java讲师,以其通俗易懂的教学风格受到广大学员的喜爱。在其分享的《Java Io流总结》文档中,详细介绍了Java IO流的基础概念、...

    JAVA_IO流学习总结

    JAVA_IO流学习总结

    java IO流总结.md

    java I/O流的总结 1.操作数据单位:字节流、字符流 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理 2.数据的流向:输入流、输出流 ...

    JavaIO流详细总结

    下面是对Java IO流的详细总结: 1. 流的概念: 流是一种抽象的数据传输方式,可以将数据从一个地方传输到另一个地方。Java中的流分为输入流和输出流,分别用于读取和写入数据。流按照处理数据的不同类型,又可以...

    java数据流总结

    java数据流总结,java io流总结,节点流和处理流 java数据流总结,java io流总结,节点流和处理流 java数据流总结,java io流总结,节点流和处理流

    《JAVA_IO流学习总结》

    总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...

    JAVAIO流学习总结(转)

    这是别人总结的很有实用价值的javaIO流教程。

    JAVA的IO流总结

    java的IO流总结:包含Inputstream,OutputStream,writer和reader

    JavaIO总结

    有关Java输入输出流的总结有关Java输入输出流的总结有关Java输入输出流的总结

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。

    javaIO流知识大总结

    在这个大总结中,我们将深入探讨Java IO流的基本概念、分类、常用类以及实践应用。 1. **基本概念** - **流(Stream)**:在Java中,流是一个抽象的概念,代表数据的有序序列。它可以是字节流或字符流,流向可以是...

    java IO流+socket源码 实现简单文本传输

    总结一下,Java IO流提供了丰富的数据传输工具,而Socket是网络通信的核心。通过结合两者,我们可以构建强大的网络应用,例如文件传输、聊天室等。对于初学者来说,理解这些基础概念并实践编写相关代码,将有助于...

    JAVA IO流的增删改查

    自已写了一个JAVA IO流的增删改查操作, 算是对IO的总结吧,初学者可以看下!

    java io图解

    java io流总结,包括字符流,字节流,很详细。inputStream outputStream

    Java-Io流,练习

    总结来说,Java的IO流是一个庞大且重要的主题,涵盖了数据的输入、输出、缓冲、转换等多个方面。对于初学者而言,理解和掌握IO流的基本概念、分类以及常用类的用法是至关重要的。通过实践练习,可以加深对IO流的理解...

    Java_IO完全总结

    Java IO系统主要包括两个包:`java.io`和`java.nio`(New IO),其中`java.io`提供了一系列基于流的I/O操作接口与实现类,而`java.nio`则提供了更高效的数据访问方式,如通道和缓冲区等。 Java IO系统的设计原则之...

Global site tag (gtag.js) - Google Analytics