Java文件操作(二):二进制文件

本文介绍Java的文件操作,包括一些高级的文件操作类及其方法


二进制文件、字节流概述

在我的博客Java文件操作(一)中介绍了Java文件读写的基本知识

1)File类用来创建一个新的文件对象

2)Scanner类、FileReader类用来读取(文本)文件

3)PrintWriter类、FileWriter类用来写入(文本)文件

/**使用PrintWriter对象对文本文件进行写入操作*/
PrintWriter outpt = new PrintWriter("temp.txt");
output.print("Welcome to Java!");
output.close();
/**使用Scanner对象对文本文件进行读取操作*/
Scanner input = new Scanner(new File("temp.txt"));
System.out.print(input.nextLine());

有很多文件I/O操作相关的类,总的来说它们分为输入类(input class)输出类(output class)

一个输入类对象实例(input object)也叫输入流(input stream),一个输出对象实例(output object)也叫输出流(output stream)

计算机通过流来完成I/O操作

通俗来讲,流就是计算机之间流动的数据序列,也是类的对象,Java中的流动方式是建立在数据交换源和目的之间的一条通信通道;其中,数据源是之可以提供数据的地方,包括键盘、磁盘文件、网络接口(网络也是特殊的文件I/O),输入流是指从计算机内部传向程序的流,输出流是指从程序传到外部的流,输入流只能写数据,输出流只能读数据

所谓的输入、输出,都是以程序为中心的

Java中数据分为字符流字节流,其中字符流主要处理文本文件,字节流主要用于处理二进制文件


字节流的特点

前面讲到,二进制文件通常用字节流处理

相比于处理文本文件的字符流,字节流具有以下特点:
1)操作的基本单元是字节
2)默认不使用缓冲区
3)不需要编码(encode)和解码(decode),相比于字符流更高效
4)通常用于处理二进制数据


处理字节流的类(概述)

不管是字节流还是字符流,都可以分为输入流和输出流

它们都直接继承自Object类

其中FilterXXStream又可以分为DataXXStream、BufferXXStream

这里我们着重讲继承关系的第三层即FileXXStream、FilterXXStream、ObjectXXStream


处理字节流的类(详解)

FileXXStream

继承关系

java.lang.Object
    java.io.XxxputStream  //InputStream、OutputStream都是抽象类,但是为其子类定义了一些非抽象方法
        java.io.FileXxxputStream

在介绍二进制字节流的读写方法之前,要明确一点:调用这些方法的调用者都要在方法签名处声明java.io.IOException(或者try-catch捕获之)

FileInputStream

常用方法

read(): int
read(b: byte[]): int
read(b: byte[], off: int, len: int): int
close(): void
skip(n: long): long

FileOutputStream

常用方法

write(int b): void
write(b: byte[]): void
write(b: byte[], off: int, len: int): void
close(): void
flush(): void

FilterXXStream

继承关系

java.lang.Object
    java.io.XxxStream
        java.io.FilterXxxStream

成员字段

FilterXxxStream有一个protected修饰的来自XxxStream类的成员字段

protected InputStream in;   //来自FilterInputStream
protected outputStream out;     //来自FilterOutputStream

构造方法

FilterXXStream类的构造方法很特别,是protected修饰的

proteted FilterXxxStream(InputStream in){
    this.in = in;
}

有什么用

看懂英文,Filter是『过滤』的意思

通俗地讲,FilterInputStream用来封装其它的输入流,并为它们提供额外的功能,FilterOutputStream用来封装其它的输出流,并为它们提供额外的功能

学术点,就是装饰器的作用——每封装一次,就添加一个新功能

ObjectXxxStream

看名字就知道,这是用来对序列化对象进行读写操作的类

java.lang.Object
    java.io.InputStream
        java.io.ObjectInputStream
java.lang.Onbject
    java.io.OutputStream
        java.io.ObjectOutputStream
public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
public class ObejctOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants

以后用到时可能会补充进来

你可能感兴趣的:(Java,语言)