缓冲字节流和缓冲字符流、StringBuffer

概述
BufferedInputStream
字节缓冲输入流

构造方法 Constructor
BufferedInputStream(InputStream in);
这里需要的参数是字节输入流对象

成员方法 Method
int read();
int read(byte[] buf);
其实就是InputStream中使用的方法。

Buffer

edOutputStream
字节缓冲输出流

构造方法 Constructor
BufferedOutputStream(OutputStream out);
这里需要一个字节输出流作为方法的参数

常用方法 Method
void write(int b);
void write(byte[] buf);
void write(byte[] buf, int off, int len);
以上方法都是OutputStream提供的方法。

所有的数据都是首先都是写入保存到BufferedOutputStream 底层操作的数组中,
当数组填满以后,或者执行指定的方法,才会将数据之间写入到内存中
小总结
  1. 使用缓冲时间效率是远远高于未使用缓冲情况,这里是一个非常经典的空间换时间概念
    缓冲占用内存 16KB 非缓冲 4byte 时间效率大于250倍 空间占用4000倍
  2. 利用代码可以发现,非缓冲IO操作时使用数组作为缓冲区和使用缓冲流操作,时间效率相似。这里还是推荐使用系统提供的缓冲流,更加安全,并且提供了一些其他方法,可以作为一定参考和使用。
BufferedReader
字符缓冲输入流
ufferedWriter
字符缓冲输出流

构造方法 Constructor:
BufferedWriter(Writer in);

常用方法:
void write(int ch);
void write(char[] buf);
void write(char[] buf, int off, int len);
void write(String str);
void write(String str, int off, int len);
void newLine();
换行操作

  1. 缓冲流是Java中提供的系统缓冲,底层都是一个缓冲数组,根据处理的数据方式不同,提供的数据有字节缓冲数组和字符缓冲数组。
  2. 字节缓冲流,默认的字节数组缓冲区是8KB
    byte[] buffer = new byte[1024 * 8];
  3. 字符缓冲流,默认的字符数组缓冲区是16KB
    char[] buffer = new char[1024 * 8];
  4. 【重点】
    任何一个缓冲流都没有任何操作文件的能力!!!读取文件数据,写入文件数据,都是依赖于对应的字符流或者字节流提供的!!!
  5. 缓冲流使用的方法,也是read write 而且是对应创建当前缓冲流使用的字符流或者字节流的!!!
  6. 缓冲流减少了CPU通过内存访问磁盘或者说文件的次数。极大的提高了开发效率。IO流操作文件内容都是在缓冲流内部的缓冲数组中,也就是内存中。
StringBuffer

String字符串常量操作会导致大量的字符串冗余问题,浪费内存。
为了解决这个冗余问题,Java中提供了两个可变长字符串
StringBuffer和StringBuilder 底层保存字符串数据的都是字符串数组形式,并且该数组的初始化容量为16个char类型。

构造方法:

Constructor:
StringBuffer();
创建一个StringBuffer类对象,在底层char类型数组中,初始化容量为16,并且
未存储任何的数据
StringBuffer(String str); [最常见]
根据用户传入参数String类型字符串,创建对应的StringBuffer对象,底层
char类型数组保存对应的字符串信息。
StringBuffer(int capacity);
根据用户传入初始化底层char类型数组容量确定StringBuffer对象

append(EveryThing);
在StringBuffer末尾追加内容,可以是任意数据类型
insert(int index, EveryThing);
在StringBuffer指定下标位置添加内容,可以是任意数据类型

delete(int start, int end);
删除从start开始,到end结束区间的所有内容,要头不要尾

deleteCharAt(int index);
删除指定下标的字符

reverse();
StringBuffer内容反序

replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符
setCharAt(int index, char ch)
指定索引位置替换一个字符

String toString();
将StringBuffer底层保存数据的char类型字符数组内容,转换为String类型返回

int indexOf(String str);
指定字符串在StringBuffer出现的第一次下标位置
int lastIndexOf(String str);
指定字符串在StringBuffer中最后一次出现的下标位置

String substring(int begin);
从指定位置开始,到字符串末尾截取获得对应的字符串
String substring(int begin, int end);
从指定位置begin开始,到end结束,获取对应的字符串,要头不要尾

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值