1、缓冲流的作用是什么?
使用字节输入流读取文件的步骤是:
Java程序 → JVM → OS → 文件单个字节/单个字符 → OS → JVM → …
效率低下;
相当于快递员送快递,一次只送一个快递;
给字节输入流提供一个缓冲区,提高读取效率;
Java程序 → JVM → OS → 一个缓冲区的内容(数组的形式) → OS → JVM → …
2、缓冲流有哪几种?
(1)字节缓冲流:BufferedInputStream,BufferedOutputStream
(2)字符缓冲流:BufferedReader,BufferedWriter
3、字节缓冲输出流的代码演示
在BufferedOutputSteam 构造方法中传递 FileOutputStream对象;
使用 BufferedOutputStream 对象的方法 write, 把数据写入到缓冲区中;
使用 BufferedOutputStream 对象的方法 flush, 把缓冲区的内容刷新到文件中;
释放资源;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedOutputSteamTest {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("a.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(97);
bos.flush();
bos.close();
}
}
总结:
构造方法:传入 FileOutputStream对象;
成员方法:write(), flush(),close()
4、字节缓冲输入流的代码演示
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class BufferedInputStreamTest {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
int len = 0;
while ((len = bis.read()) != -1){
System.out.println(len);
}
bis.close();
}
}
总结:输入流都要用到 for 循环
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class BufferedInputStreamTest {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
// int len = 0;
// while ((len = bis.read()) != -1){
// System.out.println(len);
// }
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bis.read(bytes)) != -1){
System.out.println(new String(bytes,0,len));
}
bis.close();
}
}
总结:
用字节数组的话,read的返回值是读取的长度;
String构造方法注意一下;
5、字符缓冲输出流代码实现
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferWriterTest {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("a.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("你好");
bw.flush();
bw.close();
}
}
6、字符缓冲输入流的代码实现
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderTest {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
String line = null;
while((line = br.readLine())!= null){
System.out.println(line);
}
}
}
7、对文本内容进行排序:
3、举头望明月
4、低头思故乡
1、床前明月光
2、疑是地上霜
import java.io.*;
import java.util.HashMap;
public class Test {
public static void main(String[] args) throws IOException {
HashMap<String, String> map = new HashMap<>();
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
String line;
while((line = br.readLine())!=null){
// 最重要的一步,切割,返回到字符数组中
String[] arr = line.split("、");
map.put(arr[0],arr[1]);
}
for (String key : map.keySet()) {
String value = map.get(key);
line = key + "、" + value;
bw.write(line);
// bw.write("\r\n");
bw.newLine();
}
br.close();
bw.close();
}
}
总结:
排序根据每行的首数字进行排序;
将数字放在HashMap中,会按键值对帮我们自动排序;
如何将两块内容放在HashMap中成为了重点;
用split方法,返回字符数组;