1.BufferedReader
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
(1)read
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class bufferreader {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int s1 = bf.read();
System.out.println("read的输出" + s1);
int s2 = bf.read();
System.out.println("read的输出" + s2);
}
}
/*输出是
read1的输出13
read2的输出10
*/
BufferedReader内部缓冲机制与字符读取顺序
当你使用
BufferedReader
读取字符时,它有一个内部缓冲区。当你按下回车键时,在基于 Windows 系统(回车换行是\r\n
)的控制台输入环境下,\r\n
这两个字符被放入了缓冲区。第一个
read
方法从缓冲区读取了\r
(ASCII 码为 13),此时缓冲区中还剩下\n
。当第二个read
方法被调用时,它就从缓冲区中读取剩下的\n
(ASCII 码为 10)。可以把
BufferedReader
的缓冲区想象成一个小的字符队列。字符按照输入的顺序进入这个队列,read
方法就从这个队列的头部逐个取出字符。当你按下回车键时,\r\n
就像两个排队的字符,第一个read
取走了\r
,第二个read
就取走了下一个字符\n
。当使用BufferedReader读取字符时,通过read()方法读取单个字符,回车符('\r')或者换行符('\n')在被读取后,它们和其他字符一样,只是普通的字符代码被返回。与其他一些输入读取方式不同的是,BufferedReader的read()方法不会自动忽略回车符。
(2)readLine()
readLine
方法遇到回车符(\n
)或者\r\n
中的\n
部分时,它会停止读取当前行。然后,它会返回一个字符串,这个字符串包含了从开始读取到遇到回车符之前的所有字符,而回车符本身不会包含在返回的字符串中,这就是所谓的 “会将回车抛弃”。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class bufferreader {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s1=bf.readLine();
System.out.println("s1:"+"("+s1+")");
String s2=bf.readLine();
System.out.println("s2:"+"("+s2+")");
}
}
/*
123
s1:(123)
456
s2:(456)
*/
使用split()
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class bufferreader {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] s=bf.readLine().split(" ");
for(String a:s)
System.out.print(a);
}
}
/*
a b c d e f
abcdef
*/
2.BufferedWriter
BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out));
主要使用 BufferedWriter类中的 write() 类进行输出。 当数据量大的时候一定要使用这个类进行输出,谨记!
BufferedWriter
的write
函数主要用于将字符数据写入到输出流中。它可以写入单个字符、字符数组或者字符串。这个类通常用于缓冲字符输出,减少物理写入操作的次数,从而提高输出效率。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class bufferreader {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
char a='a';
bw.write(a);//a
bw.newLine();//换行
char[] characters = {'H', 'e', 'l', 'l', 'o'};
bw.write(characters);//Hello
bw.newLine();
//bw.flush();
String text = "Hello, World!";
bw.write(text);//Hello, World!
bw.newLine();
//0开始位置,5截取长度
bw.write(characters, 0, 5);//Hello
bw.newLine();
bw.write(text,0,5);//Hello
bw.close();
//close方法:close方法在关闭BufferedWriter时,会自动调用flush方法。
//flush方法的作用是将缓冲区中的内容强制输出到目标输出流。
//在这种情况下,目标输出流是System.out,所以当close被调用时,缓冲区的数据会被输出到控制台。
//手动flush操作:如果不调用close,但手动调用flush方法,也可以将缓冲区的数据输出到控制台。
}
}