Java SE
未读!!! note 目录
PrintWriter打印流PrintWriter 是 Java 中 java.io 包的一部分,用于打印流的字符输出。它提供了便捷的方法来输出字符、字符串和其他对象,可以将数据输出到文件、控制台或其他字符流。
一、主要用途
打印各种数据类型到字符流(如文件、控制台)。
二、常用方法
print(Type x): 打印数据类型 x。
println(Type x): 打印数据类型 x,并在输出后自动添加一个换行符。
printf(String format, Object... args): 格式化输出,根据格式字符串和参数输出相应的格式。
三、便捷特性
直接输出各种数据类型:可以轻松输出布尔值、字符、字符串、整数、浮点数等。
自动刷新和自动换行:println 方法会在输出后自动添加换行符,同时可以结合流的刷新机制确保数据被写入输出目标。
支持字符串转义:可以直接打印包含特殊字符的字符串,例如 \n、\t 等。
自动编码:根据操作系统的默认编码或指定的编码方式自动处理字符编码,简化编码处理过程。
格式化输出:通过 printf 方法,可以使用格式字 ...
!!! note 目录
序列化和反序列化一、Java 序列化和反序列化概念
1.1 序列化 (Serialization)序列化是将Java对象的状态转换为字节流的过程,以便能够将对象的状态保存到存储介质(如文件、数据库)或通过网络传输到其他Java虚拟机中。序列化使得对象能够被持久化和传输。
1.2 反序列化 (Deserialization)反序列化是将字节流恢复成相应Java对象的过程。通过反序列化,可以从存储介质或网络中恢复对象的状态,使其重新变为可操作的Java对象。
1.3 序列化和反序列化的主要用途
持久化存储:将对象的状态保存到文件或数据库中,以便在以后恢复使用。
网络传输:通过网络将对象传输到远程主机上。
深度克隆:通过序列化和反序列化可以创建对象的深度拷贝。
1.4 序列化和反序列化的示例1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727 ...
Java SE
未读!!! note 目录
DataInputStream数据输入流DataInputStream 是 Java 中用于从底层输入流读取 Java 数据类型数据的类。它属于 java.io 包,提供了一系列方法,用于读取各种原始数据类型的数据,如 int、float、double、char、boolean 等。DataInputStream 通常与 DataOutputStream 配合使用,以确保数据在写入和读取时具有一致的格式。
在读取数据时,应确保数据的读取顺序与写入顺序一致。
一、构造函数
构造函数
描述
DataInputStream(InputStream in)
创建一个使用指定底层 InputStream 的 DataInputStream。
二、方法
修饰符和类型
方法
描述
final int
read(byte[] b)
从包含的输入流读取一些字节并将它们存储到缓冲区数组中 b。
final int
read(byte[] b, int off, int len)
从包含的输入流中读取最多 len 字节的数据到字节数组中。
...
Java SE
未读!!! note 目录
DataOutputStream数据输出流DataOutputStream 是 Java 中的一个类,它属于 java.io 包,主要用于写出 Java 原始数据类型的值到一个输出流。这个类是字节流的一部分,通常用于以平台无关的方式写出基本数据类型(如 int、long、float、double、boolean、char 等)的数据。
对于将数据写入到输出流并且需要恢复这些数据,通常使用 DataOutputStream 和 DataInputStream 配合使用。DataOutputStream 用于将各种数据类型以二进制格式写入到输出流,而 DataInputStream 用于从输入流中读取这些二进制格式的数据。
效率高。
一、构造函数
构造函数
描述
DataOutputStream(OutputStream out)
创建一个新的数据输出流,将数据写入指定的基础输出流。
二、方法
修饰符
方法
描述
void
flush()
刷新此数据输出流。
final int
size()
返回计数器的当前值,writt ...
!!! note 目录
FileReader读和FileWriter写乱码问题
节点流(Node Streams)
节点流直接与数据源或数据目的地(如文件、内存、网络连接等)相连接,进行数据的读写操作。它们是真正执行IO操作的流。
包装流(Processing Streams)包装流用于包装节点流或其他包装流,以提供附加功能,如缓冲、数据转换等。它们通过装饰模式增强了节点流的功能。
一、为什么FileReader读和FileWriter写会出现乱码?在Java中,FileReader和FileWriter主要用于读取和写入文本文件。它们的工作方式是基于平台默认的字符编码。这可能会导致在某些情况下出现乱码问题,尤其是在处理非ASCII字符或跨平台操作时。
1.1 出现乱码的原因主要有以下几个:
字符编码不一致:
如果文件的编码与FileReader和FileWriter默认使用的编码不同,就会出现乱码。例如,如果文件是用UTF-8编码写入的,而FileReader使用的是系统默认的编码(如Windows上的GBK或ISO-8859-1),读取时就会出现乱码。
跨平台编 ...
Java SE
未读!!! note 目录
BufferedWriter字符输出缓冲流BufferedWriter 是 Java 标准库中的一个类,属于 java.io 包,用于为字符输出流添加缓冲功能,从而提高写入效率。通过使用缓冲区,可以减少对底层输出流的访问次数,从而提高性能。
一、BufferedWriter 的主要特点和功能
缓冲区:BufferedWriter 使用内部缓冲区来暂存写入的数据,默认缓冲区大小为 8192 个字符(16 KB)。你可以通过构造函数指定不同大小的缓冲区。
提高写入效率:由于减少了对底层输出流的访问次数(例如磁盘或网络),因此可以显著提高写入操作的效率。
写入新行:提供了方便的 newLine() 方法,可以写入系统默认的行分隔符。
自动刷新:可以通过调用 flush() 方法将缓冲区中的数据立即写入到输出流。
二、构造方法
构造函数
描述
BufferedWriter(Writer out)
创建一个使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz)
创建一个新的缓冲字符输出流,该 ...
Java SE
未读!!! note 目录
BufferedReader字符输入缓冲流BufferedReader 是 Java 标准库中的一个类,属于 java.io 包,用于为字符输入流添加缓冲功能,从而提高读取效率。它提供了方便的方法来读取文本数据,尤其是读取整行文本。
一、BufferedReader 的主要特点和功能
缓冲区:BufferedReader 使用内部缓冲区来暂存读取的数据,默认缓冲区大小为 8192 个字符(16 KB)。你可以通过构造函数指定不同大小的缓冲区。
提高读取效率:通过减少对底层输入流的访问次数(例如磁盘或网络),可以显著提高读取操作的效率。
读取整行:提供了方便的 readLine() 方法,可以读取整行文本,直至遇到行结束符。
支持标记和重置:支持对流进行标记和重置操作,方便在读取过程中回退到先前的位置。
二、构造函数
构造函数
描述
BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符 ...
Java SE
未读!!! note 目录
BufferedReader字符输入缓冲流BufferedReader 是 Java 标准库中的一个类,属于 java.io 包,用于为字符输入流添加缓冲功能,从而提高读取效率。它提供了方便的方法来读取文本数据,尤其是读取整行文本。
一、BufferedReader 的主要特点和功能
缓冲区:BufferedReader 使用内部缓冲区来暂存读取的数据,默认缓冲区大小为 8192 个字符(16 KB)。你可以通过构造函数指定不同大小的缓冲区。
提高读取效率:通过减少对底层输入流的访问次数(例如磁盘或网络),可以显著提高读取操作的效率。
读取整行:提供了方便的 readLine() 方法,可以读取整行文本,直至遇到行结束符。
支持标记和重置:支持对流进行标记和重置操作,方便在读取过程中回退到先前的位置。
二、构造函数
构造函数
描述
BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符 ...
Java SE
未读!!! note 目录
带缓冲区和不带缓冲区文件读写效率对比12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package com.camellia.io.BufferedOutputStream;import org.junit.jupiter.api.Test;import java.io.*;/** * 使用 BufferedInputStream 和 BufferedOutputStream 完成文件的复制。 * 包含带有缓冲区和不带有缓冲区的两种实现方式。 */public class BufferedInputOutputStreamCopy { /** * 测试使用 BufferedInputStream 和 BufferedOutputStream 进行文件复制的效率。 * 这种方法使用缓冲区来减少实际读写磁盘的次数,从而提高性能。 ...
!!! note 目录
BufferedOutputStream字节输出缓冲流BufferedOutputStream 是 Java 标准库中的一个类,属于 java.io 包,用于为输出流添加缓冲功能,从而提高写入效率。通过使用缓冲区,可以减少对底层输出流的访问次数,从而提高性能。
一、BufferedOutputStream 的主要特点和功能
缓冲区:BufferedOutputStream 使用内部缓冲区来暂存要写入的数据,默认缓冲区大小为 8192 字节(8 KB)。你可以通过构造函数指定不同大小的缓冲区。
提高写入效率:由于减少了对底层输出流的访问次数(例如磁盘或网络),因此可以显著提高写入操作的效率。
减少I/O操作次数:通过将多个写入操作合并成一个大块写入操作,可以减少实际的I/O操作次数,从而提升性能。
二、构造方法
构造函数
描述
BufferedOutputStream(OutputStream out)
创建一个新的缓冲输出流,以将数据写入指定的基础输出流。
BufferedOutputStream(OutputStre ...