学习打卡3--I/O流(1)
输出流(Input: 从流读取数据。输入流(Output): 往流中写入数据
对流增加缓存区可以提高效率。
flush
先将输出流写入到缓冲区,当缓冲区写满后才将缓冲区的内容输出到文件中。但是当主机完成输出流的输出后,有可能缓冲区这个时候还没有被填满,这样的话,就会一直等待主机发送内容,这时候,就可以使用flush将缓冲区的内容强制输出到文件中,清空缓冲区。
注意:由于I/O流主要进行数据交互,所以很容易出现异常,所以必须进行异常处理
以下是今天敲的代码
package io;
import java.util.Scanner;
import java.io.*;
public class BufferedReaderstudy {
public static void main(String[] args) {
String S;
System.out.println("请输入想存入的字符串:");
Scanner sc = new Scanner(System.in);
S = sc.next();
try{
FileWriter fw = new FileWriter("c:\\hello\\zz.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write(S);
bufw.newLine();
// bufw.close();
// fw.close();
bufw.flush();
/*不是不关闭就不能写入,而是已经在内存缓冲中写入,但并没有写到文档中,
* 所以你看不到 你可以加入调用 flush()方法 刷新该缓冲,那个关闭输出流 和flush()方法一样,
* 都可以刷新缓冲,但close可以节省内存,如果总是调用流,但不关闭,导致内存大量占用,程序崩溃*/
FileReader fr = new FileReader("c:\\hello\\zz.txt");
BufferedReader bufr = new BufferedReader(fr);
String s;
s = bufr.readLine();
System.out.println(s);
/*对BufferedReader类,该类的readLine()方法能一次从流中读入一行,但对于BufferedWriter类,
* 就没有一次写一行的方法,所以若要向流中一次写一行,可用PrintWriter类将原来的流改造成新的打印流,
* PrintWriter类有一个方法println(),能一次输出一行。*/
PrintWriter out = new PrintWriter(bufw);
out.println("hello,world");
out.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
package io;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
System.out.println("hello world");
byte[] buffer = new byte[1024];
try {
int len = System.in.read(buffer);
String s = new String(buffer,0,len);
System.out.println("读到了"+len+"字节");
System.out.println(s);
System.out.println("s的长度是"+s.length());
}catch (IOException e) {
e.printStackTrace();
}
}
}