Java中IO流的详细介绍

1)IO流即是数据的通道。java中所有的I/O机制都是基于数据流进行输入输出操作。

2)IO流也叫输入输出流,它是以程序为基准的。输入流:数据流入程序,程序要读取数据。输出流:数据从程序流出,程序要写数据到文件等其他地方。

3)流的分类:a、按照流向:分为输入流(InputStream、Reader)和输出流(OutputStream、Writer)。b、按照读取的数据单位:字节流和字符流(一个字符两个字节)。c、按照功能:分为节点流(直接连接数据流和程序)和处理流(套接在其他流之上,获取更强大的功能)。

4)所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类。所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。


一、FileInputStream和FileOutputStream


1、FileInputStream

1)常用构造方法

public FileInputStream(File file):创建一个要从file文件读取数据的流。

public FileInputStream(String path):创建一个要从文件名为path文件读取数据的流。


2)读取方法

public int read():读取一个字节。返回作为整数读取的字节,返回-1则代表读到末尾。

public int read(byte[] b):从输入流中最多读取b.length()个字节的数据到b数组。返回读取的长度,返回-1则代表读到末尾。

public int read(byte[] b,int off,int len):从输入流中最多读取len个字节的数据到b数组,从b数组中off位置开始存储。


2、FileOutputStream

1)常用构造方法

public FileOutputStream(File file):创建一个要往file文件写入数据的流。

public FileOutputStream(File file,boolean append):append字段用于标记是否覆盖原来的内容。

public FileOutputStream(String name):创建一个要往文件名为name的文件写入数据的流。

public FileOutputStream(String name,boolean append):append字段用于标记是否覆盖原来的内容


2)写入方法

public void write(int b):向文件中写入一个字节的数据。

public void write(byte[] b):向文件中写入b.leng()个字节的数据。

publiv void write(byte[] b,int off,int len):将b数组从off位置开始的len个字节的数据写入文件。

注:flush()方法在FileOutputStream中没起任何作用。


二、FileReader和FileWriter


1、FileReader

1)构造方法

public FileReader(File file)

public FileReader(String name)

2)读取数据

public int read():返回作为整数读取的字符,返回-1则表示到末尾。

public int read(char[] c):从输入流中最多读取c.length()个字符到c数组,返回读取的字符的个数,-1则表示到末尾。

public int read(char[] c,int off,int len):从输入流中最多读取len个字符到从off位置开始存储的c数组。


2、FileWriter

1)构造方法

public FileWriter(File file)

public FileWriter(File file,boolean append)

public FileWriter(String name)

public FileWriter(String name,boolean append)

2)写入数据

通过write方法并不是将内容直接写入文件,而是先写到缓存区,当缓存区满了再写入文件。

public void write(int c)

public void write(String s)

public void write(char[] c)

public void write(String s,int off,int len)

public void write(char[] c,int off,int len)

3)将内容写入文件

将内容强制写入到文件并清空缓存区。

void close():关闭连接,自动刷新缓存区,将内容写入文件。

void flush():刷新缓存区,将数据写入文件。


三、InputStreamReader和OutputStreamWriter(转换流,将字节流转换成字符流)


1、InputStreamReader

1)构造方法

public InputStreamReader(InputStream in)

public InputStreamReader(InputStream in,CharsetDecoder dec):使用dec类型的charset读取字节并将它解码成字符。如CharsetDecoder类型为"utf-8"


2)读取数据

public int read()

public int read(char[] c)

public int read(char[] c,int off,int len)


2、OutputStreamWriter

1)构造方法

public OutputStreamWriter(OutputStream out)

public OutputStreamWriter(OutputStream out,CharsetDecoder dec)


2)写入数据

public void write(int c)

public void write(String s)

public void write(char[] c)

public void write(String s,int off,int len)

public void write(char[] c,int off,int len)

写入的数据会存在缓存区,再调用flush或者close()方法写入文件。


四、缓冲流(BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter)


1、BufferedReader

1)构造方法

public BufferedReader(Reader in)

public BufferedReader(Reader in,int size):size用于指定缓存区的大小。


2)读取数据

public int read()

public int read(char[] c)

public int read(char[] c,int off,int len)

public String readline():读取一行。

a、readline()跟其他的read方法不同,其他的read方法读取到没有数据时就会返回-1,readline()是一个阻塞方法,当读取到没有数据时,会一直阻塞在那里。所以要慎重的使用readline()。

b、readline()只有在数据流发生异常或者另一端被close()之后才会返回null。

c、如果不指定缓存区的大小,readline()使用的buffer有8192个字符,在达到8092之前,只有遇到"/r"、"/n"、"/r/n"的时候才会返回,所以读入的数据要有"/r"、"/n"、"/r/n"。


2、BufferedWriter

1)构造方法

public BufferedWriter(Writer out)

public BufferedWriter(Writer out,int size)


2)写入数据

public void write(int c)

public void write(char[] c)

public void write(String s)

public void write(char[] c,int off,int len)

public void write(String s,int off,int len)

public void newLine():写入一个行分隔符

写入的数据会存在缓存区,当调用flush()或者close()方法的时候才写入文件。


3、BufferedInputStream

1)构造方法

public BufferedInputStream(InputStream in)

public BufferedInputStream(InputStream in,int size)


2)写入数据

public int read()

public int read(byte[] b)

public int read(byte[] b,int off,int len)


4、BufferedOutputStream

1)构造方法

public BufferedOutputStream(OutputStream out)

public BufferedOutputStream(OutputStream out,int size)


2)写入数据

public void write(int c)

public void write(byte[] b)

public void write(byte[] b,int off,int len)

写入的数据会到缓存区,调用flush()或者close()方法写入文件。


五、数据流(可以读写基本数据类型的数据)


1、DataInputStream

1)构造方法

public DataInputStream(InputStream in)


2)读取数据

public int read()

public int read(byte[] b)

public int read(byte[] b,int off,int len)

public boolean readBoolean()

public byte readByte()

public char readChar()

public double readDouble()

public float readFloat()

public int readInt()

public short readShort()

public long readLong()

public String readUTF():读取字符串


2、DataOutputStream

1)构造方法

public DataOutputStream(OutputStream out)


2)写入数据

public void write(int b)

public voidwrite(byte[] b)

public voidwrite(byte[] b,int off,int len)

public voidwriteBoolean(boolean b)

public void writeByte(int b)

public void writeChar(int c)

public void writeBytes(String s)

public void writeChars(String s)

public void writeDouble(double d)

public void writeFloat(float f)

public void writeInt(int i)

public void writeShort(short s)

public void writeLong(long l)

public void writeUTF():写入字符串

注意:读取的顺序要和写入的顺序一致。并且调用flush()或者close()方法才会写入文件。


六、内存流


1、ByteArrayInputStream

1)构造方法

构造方法中带着一个byte类型的数组,read()方法读取的是该byte数组中的数据

public ByteArrayInputStream(byte[] b)

public ByteArrayInputStream(byte[] b,int off,int len)


2)读取数据

public int read()

public int read(byte[] b)

public int read(byte[] b,int off,int len)


2、ByteArrayOutputStream

1)构造方法

public ByteArrayOutputStream():对应的字节数组大小为32

public ByteArrayOutputStream(int size):对应的字节数组大小为size


2)写入数据

public void write(int c)

public void write(byte[] b)

public void write(byte[] b,int off,int len)

调用flush()或者close()方法才会写入文件。

这两个写入写出流可以配合使用。

ByteArrayOutputStream baos=new ByteArrayOutputStream();

baos.write(1);

baos.flush();

baos.close();

ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray());


七、对象流


1、ObjectInputStream

1)构造方法

public ObjectInputStream()

public ObjectInputStream(InputStream in)


2)写入数据

同DataInputStream,可以写入基本数据类型的数据,除此之外,还可以写入对象。

public Object readObject()


2、ObjectOutputStream

1)构造方法

public ObjectOutputStream()

public ObjectOutputStream(OutputStream out)


2)写入数据

写入数据同DataOutputStream,除此之外还可以写入对象。

public void writeObject(Object o)

例:

class Dog implements Serializable{}

ObjectOutputStream ois=new ObjectOutputStream();

ois.writeObject(new Dog());

ObjectInputStream bis=new ObjectInputStream();

(Dog)bis.readObject();



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值