java day031 缓冲流和常用API

42 篇文章 1 订阅
42 篇文章 1 订阅

java day031 缓冲流和常用API

1.缓冲流概述

BufferedInputStream
	字节缓冲输入流
ButteredOutputStream
	字节缓冲输出流
ButteredReader
	字符缓冲输入流
ButteredWriter
	字符缓冲输出流

1.缓冲流是Java提供的系统缓冲,底层是一个缓冲数组,根据处理的数据方式不同,提供的数据有字节缓冲数组和字符缓冲数组
2.字节缓冲流,默认的字节数组缓冲区是8KB
	byte[] buffer = new byte[1024 * 8];
3.字符缓冲流,默认的字符数组缓冲区是16KB
	char[] buffer = new char[1024 * 8];
4.【重点】
任何一个缓冲流都没有操作文件的能力!!!读取文件数据,写入文件数据都是依赖于对应的字符流或者字节流
5.缓冲流使用的方法,也是read write,并对应当前使用的字符流或者字节流
6.缓冲流极大的提高了开发效率

1.1BufferedInputStream字节输入缓冲流

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

成员方法Method
int read();
int read(byte[] buf);
public class TestBufferedInputStream {
	public static void main(String[] args) throws IOException {
		
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:/test/1.txt"));
		
		System.out.println((char)bis.read());
		
		byte[] buf = new byte[1024 * 8];
		int length = -1;
		
		while ((length = bis.read(buf)) != -1) {
			System.out.print(new String(buf, 0, length));
		}
		
		bis.close();
	}
}

1.2BufferedOutputStream字节输出缓冲流

构造方法Constructor
BufferedOutputStream(OutputStream out);
这里的参数是字节输入流对象

成员方法Method
void write(int b);
void write(byte[] buf);
void write(byte[] buf, int off, int count);
public class TestBufferedOutputStream {
	public static void main(String[] args) throws IOException {
		
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:/test/1.txt"));
		
		bos.write(49);
		
		bos.write("12345455".getBytes());
		
		bos.write("ABBIHIDH".getBytes(), 0, 3);
		
		bos.close();
	}
}

1.3 字节缓冲总结

1.使用缓冲的效率远远高于未使用缓冲的效率,这里是一个经典的空间换时间概念
2.推荐使用系统提供的缓冲流,更加的安全。

1.4BufferedReader 字符输入缓冲流

构造方法Constructor
BufferedReader(Reader in);

成员方法Method
int read();
int read(char[] buf);
String readLine();【新方法】
从文件读取一行数据,返回值类型是字符串,如果读到文件末尾,返回null
public class TestBufferedReader {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new FileReader("D:/test/1.txt"));
		
		br.read();
		
//		int length = -1;
//		char[] buf = new char[1024 * 8];
//		
//		while ((length = br.read(buf)) != -1) {
//			System.out.println(new String(buf, 0, length));
//		} 
		
		String s = null;
		
		while ((s = br.readLine()) != null) {
			System.out.println(s);
		}
	}
}

1.5 BufferedWriter 字符输出缓冲流

构造方法Constructor
BufferedWriter(Writer in);

成员方法Method
void write(int b);
void write(char[] buf);
void write(char[] buf, int off, int count);
void write(String str);
void write(String str, int off, int len);
void newLine();
	换行
public class TestBufferedWriter {
	public static void main(String[] args) throws IOException {
		
		BufferedWriter bw = new BufferedWriter(new FileWriter(("D:/test/1.txt"),true));
		
		bw.write("hahahh");
		bw.newLine();
		
		bw.write("字符类型数组".toCharArray());
		bw.newLine();
		
		bw.write("字符类型数组数组".toCharArray(), 1, 3);
		
		bw.write("字符串", 1, 2);
		
		bw.close();
	}
}

2.java常用API

2.1 StringBuffer概述

为了解决字符串荣誉问题,Java提供了两个可变长字符串StringBuffer与StringBuilder,底层为初始化容量16的字符数组
StringBuffer是一个线程安全的可变长字符串对象

2.2 StringBuffer构造方法

Constructor
	StringBuffer();
	StringBuffer(String str);
	StringBuffer(int capacity);

2.3添加方法

append(EveryThing);
在StringBuffer末尾追加内容,可以是任意数据类型
insert(int index, EveryThing);
在指定下标添加内容,可以是任意数据类型
public class TestStringBuffer {
	public static void main(String[] args) {
		
		StringBuffer sb = new StringBuffer("hahah");
		
		String str = null;
		
		sb.append(true);
		sb.append('1');
		sb.append(1);
		sb.append(1.1);
		sb.append(str);
		sb.append("aaaaa".toCharArray());
		
		System.out.println(sb);
		
		sb.insert(2, true);
		System.out.println(sb);
	}
}

2.4 查看方法

String toString();
	将底层字符数组保存的内容以字符串形式返回

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

String substring(int begin);
从指定下标截取字符串到末尾
String substring(int begin, int end);
从指定下标截取到end结束,左闭右开
public class TestStringBuffer2 {
	public static void main(String[] args) {
		
		StringBuffer sb = new StringBuffer("123465586ABCDEFG");
		
		System.out.println(sb.toString());
		
		System.out.println(sb.indexOf("234"));
		System.out.println(sb.lastIndexOf("234"));
		
		System.out.println(sb.substring(3));
		System.out.println(sb.substring(3,7));
		
	}
}

2.5修改方法

replace(int start, int end, String str);
用指定字符串替换从start下标开始到end下标结束的子字符串

setCharAt(int index , char ch);
指定下标替换一个字符
System.out.println(sb.replace(0, 3, "哈哈哈哈哈"));
sb.setCharAt(0, '嘿');

2.6删除和反序

delete(int start, int end);
从start开始到end结束,左闭右开

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

reverse();
内容倒叙

2.7StringBuffer与StringBuilder的关系

StringBuffer 线程安全,效率低
StringBuilder 线程不安全,效率高
两者方法一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值