i o详解

io

介绍

Package java.io
通过数据流,序列化和文件系统提供系统输入和输出。

以内存为基准,数据进内存称之为读,出内存称之为写。

原理:Java程序——JVM——OS——OS调用io方法

第一部分:写

抽象类:OutputStream

这个抽象类是表示字节输出流的所有类的超类。

public abstract class OutputStream
extends Object
implements Closeable, Flushable

已知直接子类:
ByteArrayOutputStream , FileOutputStreamFilterOutputStream , ObjectOutputStream , OutputStreamPipedOutputStream

方法

抽象方法

void close()
关闭此输出流并释放与此流相关联的任何系统资源。

void flush()
刷新此输出流并强制任何缓冲的输出字节被写出。

void write(byte[] b)
将 b.length字节从指定的字节数组写入此输出流。(转成二进制数据写出)

void write(byte[] b, int off, int len)
从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。

abstract void write(int b)(参数是十进制但会转成二进制数据写出)
将指定的字节写入此输出流。
(注意:任意的文本编辑器,打开时,会查询编码表,将二进制数据转成文本数据,0~127就是ASCII,其他就是根据系统)

文件字节输出流:FileOutputStream

public class FileOutputStream
extends OutputStream

目的地:磁盘中的文件

构造方法

FileOutputStream(File file)
创建文件输出流以写入由指定的 File对象表示的文件。

FileOutputStream(String name)
创建文件输出流以指定的名称写入文件。(路径)

FileOutputStream(File file, boolean append)
创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream(String name, boolean append)
创建文件输出流以指定的名称写入文件。(append:追加写开关 true:开启追加)
(注意:win的换行字符是\r\n,linux是/n,mac是/r)

序列化字节输出流:ObjectOutputStream

public class ObjectOutputStream
extends OutputStream
implements ObjectOutput, ObjectStreamConstants

ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。
(说白了就是将对象保存成文件的形式,称之为序列化,反之加载进内存就称之为反序列化)

只有支持java.io.Serializable接口的对象才能写入流中。

方法writeObject用于将一个对象写入流中。 任何对象,包括字符串和数组,都是用writeObject编写的。

注意:序列化和反序列化有一个依赖凭证就是序列化ID。用来保证是同一个对象,不然就会抛出一个叫做InvalidClassException的异常。 这个序列号是根据编译时的class文件,一旦源程序被修改,重新编译一个类文件,这个序列号也会被修改。解决方法就是使用固定的序列号。

构造

protected ObjectOutputStream(OutputStream out)
创建一个写入指定的OutputStream的ObjectOutputStream。

方法

void writeObject(Object obj)
将指定的对象写入ObjectOutputStream。

抽象类:Writer

用于写入字符流的抽象类。

public abstract class Writer
extends Object
implements Appendable, Closeable, Flushable

已知直接子类:
BufferedWriter , CharArrayWriter , FilterWriter , OutputStreamWriter , PipedWriter , PrintWriter , StringWriter

方法

构造方法
protected Writer()
创建一个新的人物流作家,其关键部分将在作者本身上同步。

protected Writer(Object lock)
创建一个新的字符流写入器,其关键部分将在给定对象上进行同步。
方法摘要

void write(char[] cbuf)
写入一个字符数组。

abstract void write(char[] cbuf, int off, int len)
写入字符数组的一部分。

void write(String str)
写一个字符串

void write(String str, int off, int len)
写一个字符串的一部分。

Writer append(char c)
将指定的字符附加到此作者。

字符输出流:OutputStreamWriter

OutputStreamWriter是字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节charset 。

public class OutputStreamWriter
extends Writer

已知直接子类:
FileWriter

构造

OutputStreamWriter(OutputStream out)
创建一个使用默认字符编码的OutputStreamWriter。

OutputStreamWriter(OutputStream out, Charset cs)
创建一个使用给定字符集的OutputStreamWriter。

文件字符输出流:FileWriter

public class FileWriter
extends OutputStreamWriter

文件是否可用或可能被创建取决于底层平台。 特别是某些平台允许一次只能打开一个文件来写入一个FileWriter (或其他文件写入对象)。 在这种情况下,如果所涉及的文件已经打开,则此类中的构造函数将失败。

FileWriter是用于写入字符流。 要编写原始字节流,请考虑使用FileOutputStream 。

字符输出流的输出过程,和字节流不同,这个对象的write方法会把数据写入到内存缓冲区中(其实就是字符转换成字节的过程),还要使用flush方法刷新将缓冲区的数据进文件中多了这么一个过程。(重点)

构造方法

FileWriter(File file)
给一个File对象构造一个FileWriter对象。
FileWriter(File file, boolean append)
给一个File对象构造一个FileWriter对象。

FileWriter(String fileName)
构造一个给定文件名的FileWriter对象。
FileWriter(String fileName, boolean append)
构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。

缓冲字节输出流:BufferedOutputStream

public class BufferedOutputStream
extends FilterOutputStream

该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
(实际上缓冲区这玩意就是个数组)

构造

BufferedOutputStream(OutputStream out)
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。(这个构造方法可以理解为为字节流创建一个缓冲区)

缓冲字符输出流:BufferedWriter

public class BufferedWriter
extends Writer

构造

BufferedWriter(Writer out)
创建使用默认大小的输出缓冲区的缓冲字符输出流。

打印流:PrintStream

为其他输出流添加了功能,使他们能够方便的打印各种数据值的表示形式。

是最好的输出流。

与其他输出流不同的是,打印流永远不会抛出IOException

有特有的方法
void print(任意类型的值)
void println(任意类型的值并换行)

如果使用的是父类的方法写数据,将查询编码表(和父类一样),但是如果是使用的特有的方法,那么就是原样输出

构造

指定输出的目的地,或是得到一个字节输出流

第二部分:读

抽象类:InputStream

这个抽象类是表示输入字节流的所有类的超类。

public abstract class InputStream
extends Object
implements Closeable

已知直接子类:
AudioInputStream , ByteArrayInputStream , FileInputStream , FilterInputStream , InputStream , ObjectInputStream , PipedInputStream , SequenceInputStream , StringBufferInputStream

方法

抽象方法

abstract int read()
从输入流读取数据的下一个字节。(-1表示读完了,并且返回的是十进制数据)

int read(byte[] b)
从输入流读取一些字节数,并将它们存储到缓冲区 b 。
(byte数组起到的作用是缓冲,可以一次读到多个字节,建议长度定位1024或者是它的整数倍,这个方法返回的int就不再是具体每个字节的十进制数据,而是读取的有效字节个数)

int read(byte[] b, int off, int len)
从输入流读取最多 len字节的数据到一个字节数组。

文件字节读取流:FileInputStream

public class FileInputStream
extends InputStream

构造

FileInputStream(File file)
通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。

FileInputStream(String name)
通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

反序列化字节读取流:ObjectInputStream

public class ObjectInputStream
extends InputStream
implements ObjectInput, ObjectStreamConstants

反序列化先前使用ObjectOutputStream编写的原始数据和对象。

只能从流中读取支持java.io.Serializable或java.io.Externalizable接口的对象。

反序列化对象时发生的任何异常都将被ObjectInputStream捕获并中止读取过程。

构造

protected ObjectInputStream(InputStream in)
创建从指定的InputStream读取的ObjectInputStream。

方法

Object readObject()
从ObjectInputStream读取一个对象。

抽象类:Reader

用于读取字符流的抽象类。

为什么有这个类,原因就在于字节流读中文数据时,就拿GBK来说,一个中文字符是2个字节,utf8是3个,那么处理起来是不方便的。

public abstract class Reader
extends Object
implements Readable, Closeable

已知直接子类:
BufferedReader , CharArrayReader , FilterReaderInputStreamReaderPipedReader , StringReader

方法

抽象方法

abstract void close()
关闭流并释放与之相关联的任何系统资源。

int read()
读一个字符

int read(char[] cbuf)
将字符读入数组。

abstract int read(char[] cbuf, int off, int len)
将字符读入数组的一部分。

字符读取流:InputStreamReader

InputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

public class InputStreamReader
extends Reader

已知直接子类:
FileReader

构造

InputStreamReader(InputStream in)
创建一个使用默认字符集的InputStreamReader。

InputStreamReader(InputStream in, Charset cs)
创建一个使用给定字符集的InputStreamReader。

文件字符读取流:FileReader

public class FileReader
extends InputStreamReader

FileReader是用于读取字符流。 要读取原始字节流,请考虑使用FileInputStream 。

构造方法

FileReader(File file)
创建一个新的 FileReader ,给出 File读取。

FileReader(String fileName)
创建一个新的 FileReader ,给定要读取的文件的名称。

缓冲字节读取流:BufferedInputStream

public class BufferedInputStream
extends FilterInputStream

构造

BufferedInputStream(InputStream in)
创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。

缓冲字符读取流:BufferedReader

public class BufferedReader
extends Reader

构造

BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值