1.字节流
字节流是处理字节数据的流,它主要用于处理二进制数据,如图片、音频、视频等。Java中的字节流主要包括InputStream和OutputStream两个抽象类,以及它们的各种实现类,如FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream等。
字节流的操作单位是字节,适用于处理所有类型的文件,包括文本文件(按字节读取或写入文本内容)和二进制文件(如图片、视频等)。
字节流读取文件:
Thread t1 = new Thread(() -> {
try {
System.out.println(Thread.currentThread().getName());
BufferedInputStream bufferedInputStream = new BufferedInputStream(
new FileInputStream("/home/Code/Java/Test/file1.txt"), 1024);
byte[] bytes = new byte[1024];
int len = bufferedInputStream.read(bytes);
System.out.println(bytes.toString());
} catch (IOException ioException) {
System.out.println(ioException);
}finally{
bufferedInputStream.close();
}
});
2.字符流
字符流是处理字符数据的流,它主要用于处理文本数据。Java中的字符流主要包括Reader和Writer两个抽象类,以及它们的各种实现类,如FileReader、FileWriter、BufferedReader、BufferedWriter等。
字符流的操作单位是字符,因此它更适合处理文本文件。使用字符流处理文本文件时,可以自动处理文件的编码问题,使得程序更加健壮。
Thread t2 = new Thread(() -> {
try {
System.out.println(Thread.currentThread().getName());
FileReader fr = new FileReader("/home/Code/Java/Test/input.txt");
BufferedReader br=new BufferedReader(fr);
String chs=br.readLine();
System.out.println(chs);
} catch (Exception e) {
System.out.println(e);
}finally{
br.close();
fr.close();
}
});
处理的是文本数据,并且希望自动处理编码问题,那么应该选择字符流。处理的是二进制数据,或者需要对数据的每一位进行精确控制,那么应该选择字节流。
3.读取控制台输入
3.1 Scanner
Scanner 是 Java 中的一个实用类,它位于 java.util 包中,用于简化基本类型和字符串的输入。Scanner 类可以解析基本类型和字符串,通过使用正则表达式分隔输入数据。
要使用 Scanner,你需要首先创建它的一个实例,通常与某种输入源(如键盘输入、文件等)相关联。最常见的用法是与 System.in 关联,以从键盘读取输入。
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
// 创建一个 Scanner 对象,与 System.in 关联
Scanner scanner = new Scanner(System.in);
// 读取一个整数
System.out.print("请输入一个整数: ");
int number = scanner.nextInt();
System.out.println("你输入的整数是: " + number);
// 读取一个浮点数
System.out.print("请输入一个浮点数: ");
double doubleNumber = scanner.nextDouble();
System.out.println("你输入的浮点数是: " + doubleNumber);
// 读取一个字符串
System.out.print("请输入一个字符串: ");
String text = scanner.next();
System.out.println("你输入的字符串是: " + text);
// 读取一行文本(包含空格)
System.out.print("请输入一行文本: ");
String line = scanner.nextLine();
System.out.println("你输入的一行文本是: " + line);
// 关闭 Scanner 对象
scanner.close();
}
}
3.2 输入流缓存
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String input = br.readLine();
String[] pars=input.split(" ");
ArrayList<Integer> als=new ArrayList<>();
for(String par : pars){
als.add(Integer.parseInt(par));
}