【Java基础系列】第11章 输入/输出(2)

11.2 Java的IO流

11.2.1 IO流的分类

IO流的三种分类方式:

1.按流的方向分为:         输入流 和 输出流

2.按流的数据单位不同分为: 字节流 和 字符流

3.按流的功能不同分为:     节点流 和 处理流

Ps:节点流表示的是直接操作节点(例如文件,键盘)的流,例如FileInputStream.

处理流(过滤流)表示的是对节点流进行了操作(加工)的,例如InputStreamReader

IO流的四大抽象类

字符流: Reader(读)          Writer(写)

字节流: InputStream(读数据)  OutputStream(写数据)

Ps:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

11.2.2 常用的IO流

 

11.2.3 IO流的基本用法

(1)InputStream的基本方法

int read() 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾

void close()  关闭流释放内存资源

long skip(long n) 跳过n个字节不读

(2)OutputStream的基本方法

void write(int b)  向输出流写入一个字节数据

void flush() 将输出流中缓冲的数据全部写出到目的地

(3)Reader的基本方法

int read() 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾

(4)Writer的基本方法

void write(int c) 向输出流写入一个字符数据

void write(String str) 将一个字符串中的字符写入到输出流

void write(String str,int offset,int length)

将一个字符串从offset开始的length个字符写入到输出流

void flush() 将输出流中缓冲的数据全部写出到目的地

11.2.4 输入输出体系

(1)缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。此处理流的构造方法都得传相对应的基类类型

BufferedReader:提供了readLine方法用于高效读取一行字符串

BufferedWriter:提供了newLine方法用于写入一个行分隔符也就是换行

BufferedInputStream 没多大用处

BufferedOutputStream 没多大用处

(2)转换流:主要作用将字节流转换成字符流。用处较大!

转换流在构造时可以指定其编码集合

InputStreamReader需要和InputStream套接

OutputStreamWriter需要和OutputStream套接

例:OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream(文件路径);

方法例:osw.getEncoding(); 获得流的编码方式

(3)数据流与字节数组流

数据流是字节流,主要为实现可以存取Java原始数据类型如long,boolean

DataInputStream需要和InputStream套接

DataOutputStream需要和OutputStream套接

DataInputStream方法:readBoolean() readInt()…

readUTF():网络传输常用方法 读一个Unicode字符串

DataOutputStream方法与DataInputStream基本对应为写的方法

//此构造函数等于已可以往一个字节数组里输入内容
ByteArrayOutputStream baos = new ByteArrayOutputStream();

//此方法为获取一个字节数组方法返回字节数组
baos.toByteArray();

//此方法获取字节数组占了多少字节
new ByteArrayInputStream(一个字节数组).available();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try{
    //写入double类型的随机数
    dos.writeDouble(Math.random());  
    dos.writeBoolean(true);
    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    System.out.println(bais.available());
    DataInputStream dis = new DataInputStream(bais);
    //输出读取的double类型数据
    System.out.println(dis.readDouble());  
    //输出读取的boolean类型数据
    System.out.println(dis.readBoolean()); 
    dos.close();
    dis.close();
}catch (IOException e){
    e.printStackTrace();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Yvan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值