Java遵循标准I/O的模型,提供了Syetem.in,System.out,以及System.err.SYStem.in是标准输入,System.out是标准输出一般用System.out.println();标准输出到控制台;标准输入从键盘上输入,System.in.read();

Java的IO设计的确很复杂,很多朋友在使用时IO时被各种各样的流弄的晕头转向。
以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流,
所有的输入流都是抽象类IuputStream(字节输入流)或者抽象类Reader(字符输入流)的子类。
所有的输出流都是抽象类OutputStream(字节输出流)或者抽象类Writer(字符输出流)的子类
之所以IO那么复杂,是为了更好的应对各种场景,比如
BufferedWriter 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。由于继承了FilterInputStream,其可用于包装装饰其他流使它们提高效率,既采用了装饰设计模式。
InputStreamReader和OutputStreamWriter转换流,作为字符和字节的桥梁
对象操作流ObjectInputStream和ObjectOutputStream用于Java 对象的基本数据类型和图形读写。
用于操作数组ByteArrayInputStream,字符串StringWriter等流
区分技巧,下面分享下我找到的一份IO使用技巧总结
IO设计非常复杂不过其目标还是为了能更好的应对各种场景使用更适合的流提高效率。希望我的回答对你有所帮助。