java io流框架_java核心学习(十二) IO框架---理解IO流

一、javaIO的基本模型----IO流(stream)

javaIO框架把不同的输入、输出源抽象称作stream,所有的可作为输入输出源的存在,不论是物理设备如同键盘、显示器,还是软件比如管道,还是数据结构比如数组,都抽象成为了“流”,java代码通过对流的统一的输入与输出操作,来完成对不同真实设备或者软件的输入输出。在javaIO模型中,每一个软件硬件都可以作为当前java进程的一个输入流或输出流。

总而言之,“流”的方式允许java程序使用相同的方式来访问不同的输入、输出源

二、流的分类

1、输入流:当前进程从中读取数据;输出流:当前进程写入数据(InputStream、OutputStream)

2、字节流、字符流(Reader、Writer),字符流是特殊的字节流

3、节点流:又称低级流,指特定节点的流;处理流:高级流,用处理流来包装节点流(装饰器设计模式)。

普通节点流是一个单位一个单位的读取与写入(一个字符、一个字节),而处理流增加了缓冲可以提高效率,也提供了一系列方法来一次输入输出大批量内容

但是“流”模型的IO方式说到底还是基于一个"水滴"一个"水滴"的输入与输出,所以效率会低。

InputStream

FileInputStream

ByteArrayInputStream

FilterInputStream

DataInputStream

BufferedInputStream

LineNumberInputStream

PushbackInputStream

ObjectInputStream

PipedInputStream

SequenceInputStream

StringBufferInputStream

OutputStream

FileOutputStream

ByteArrayOutputStream

FilterOutputStream

DataOutputStream

BufferedOutputStream

PrintStream

ObjectOutputStream

PipedOutputStream

上面两颗树,根节点是两个抽象父类,第一层叶子结点都是节点流,第一层非叶子节点是过滤流(处理流)父类,第二层叶子节点是过滤流,过滤流都继承自FilterXxxXxxx

三、用一用

1、输入流InputStream 和 Reader

read 方法返回值是读取的字节数

packageIOTest;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;public classFileInputStreamTest {public static void main(String[] args) throwsIOException{//创建字节输入流

InputStream fis = new FileInputStream("./src/main/java/IOTest/FileInputStreamTest.java");//创建一个1024的byte数组用来保存读取的数据

byte[] bbuf = new byte[1024];while (fis.read(bbuf) > 0){

System.out.println(newString(bbuf));

}

fis.close();

}

}

输出

93d21ebd2e01616210278cedfdbb3ba9.png

2、OutputStream

package IOTest;

import javax.wsdl.Input;

import java.io.*;

public class FileOutputStreamTest {

public static void main(String[] args){

try (

OutputStream fos= new FileOutputStream("newFile.txt");

InputStream fis= new FileInputStream("./src/main/java/IOTest/FileInputStreamTest.java");

){byte[] bbuf = new byte[30];while (fis.read(bbuf) > 0){

fos.write(bbuf);

System.out.println(new String(bbuf));

}

}catch (IOException e){

e.printStackTrace();

}

}

}

但是输出的文件变成这样

d4571edb13182394df77c7cb18869b09.png

这是因为bbuf数组大小为30,数组靠后的部分在最后一次循环中没有被覆盖上次循环所存的内容,所以会出现最后一行的乱入。

3、处理流实例 PrintStreamTest

//只需要在打开流的时候将节点流包装为处理流

FileOutputStream fos = new FileOutputStream("xxx.txt");

PrintStreamps=new PrintStream(fos);//PrintStream的输出功能很强,若要输出文本最好用PrintStream

ps.println("xxx");ps.println(new Xxx());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值