1.文件流(开发中操作十分频繁,eg:躺着一个Apache FileUtils类)
File
类是文件和目录的抽象表示,主要用于文件和目录的创建、查找和删除等操作。要想修改文件内容,需要借助输入输出流。
2.字节流:JavaIO的基石
一切文件(文本、视频、图片)的数据都是以二进制的形式存储的,传输时也是。所以,字节流可以传输任意类型的文件数据。
3.字符流Writer/Reader
字符流是一种用于读取和写入字符数据的输入输出流。与字节流不同,字符流以字符为单位读取和写入数据,而不是以字节为单位。常用来处理文本信息。
tips:从另一个角度说,字符流 = 字节流 + 编码表
IO异常:文件处理的话,用try-catch-resource吧,在resource中关闭流。
4.缓冲流
Java 的缓冲流是对字节流和字符流的一种封装,通过在内存中开辟缓冲区来提高 I/O 操作的效率。Java 通过 BufferedInputStream 和 BufferedOutputStream 来实现字节流的缓冲,通过 BufferedReader 和 BufferedWriter 来实现字符流的缓冲。
缓冲流的工作原理是将数据先写入缓冲区中,当缓冲区满时再一次性写入文件或输出流,或者当缓冲区为空时一次性从文件或输入流中读取一定量的数据。这样可以减少系统的 I/O 操作次数,提高系统的 I/O 效率,从而提高程序的运行效率。
5.转换流
转换流可以将一个字节流包装成字符流,或者将一个字符流包装成字节流。这种转换通常用于处理文本数据,如读取文本文件或将数据从网络传输到应用程序。
6.序列流
Java 的序列流(ObjectInputStream 和 ObjectOutputStream)是一种可以将 Java 对象序列化和反序列化的流。
序列化是为了将Java对象在网络中传输,反序列化是为了得到Java对象在程序中使用。
Kryo序列化库:实际开发中,很少使用JDK自带的序列反序列方法,因为不方便。Kryo相对好点而已。
transient关键字(仅修饰字段,类和方法不能修饰):Java对象序列化的过程中,某些字段不希望被序列化,加上此字段即可。注:加上transient关键字的字段(类的成员变量),在反序列化的过程中,会被设置为默认值。
7.打印流
我只说一个:System.out.println();
打印流的特点,看看吧:
(1)可以自动进行数据类型转换:打印流可以将各种数据类型转换为字符串,并输出到指定的输出流中。
(2)可以自动进行换行操作:打印流可以在输出字符串的末尾自动添加换行符,方便输出多个字符串时的格式控制
(3)可以输出到控制台或者文件中:打印流可以将数据输出到控制台或者文件中,方便调试和日志记录(尽管生产环境下更推荐使用Logback、ELK 等)
8.Java异常处理
Error 的出现,意味着程序出现了严重的问题,而这些问题不应该再交给 Java 的异常处理机制来处理,程序应该直接崩溃掉,这种错误的出现,对于程序来说是致命的。
Exception 的出现,意味着程序出现了一些在可控范围内的问题,我们应当采取措施进行挽救。
checked 异常(检查型异常)在源代码里必须显式地捕获或者抛出,否则编译器会提示你进行相应的操作;而 unchecked 异常(非检查型异常)就是所谓的运行时异常,通常是可以通过编码进行规避的,并不需要显式地捕获或者抛出。