目录
字节流
字符流
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。
字节流和字符流的区别
①读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
②处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
③字节流:一次读入或读出是8位二进制。
字符流:一次读入或读出是16位二进制。
设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
常用的处理流
①缓冲流:BufferedInputStrean 、BufferedOutputStream、 BufferedReader、 BufferedWriter 增加缓冲功能,避免频繁读写硬盘。
②转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。
③数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。
序列化
如果想要实现序列化,就要在类上实现一个Serializable接口,这是一个序列化标识。
类发生序列化之后,为了防止类发生改变不能反序列化,在类上生成一个
static final long serialVersionUID。如果不想让类的某个字段序列化。可以加上transient关键字或者在框架中使用@Transient注解。
File
File
类是用来操作文件的类,但它不能操作文件中的数据。
File类的常用方法
方法 | 说明 |
createNewFile() | 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
delete() | 删除此抽象路径名表示的文件或目录。 |
exists() | 测试此抽象路径名表示的文件或目录是否存在。 |
getAbsoluteFile() | 返回此抽象路径名的绝对路径名形式。 |
getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串。 |
length() | 返回由此抽象路径名表示的文件的长度。 |
mkdir() | 创建此抽象路径名指定的目录。 |
代码
// 字符流复制文件
public static void main(String[] args) throws IOException {
FileReader fileReader = null;
FileWriter fileWriter = null;
try {
fileReader = new FileReader("head.text");
fileWriter = new FileWriter("fos.text");
int len;
char[] bytes = new char[1024];
while ((len = fileReader.read(bytes)) != -1) {
fileWriter.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
fileReader.close();
}
if (fileWriter != null) {
fileWriter.close();
}
}
}
// 字节缓冲流复制文件 head.text -> fos.text
public static void main(String[] args) throws IOException {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream("head.text"));
bos = new BufferedOutputStream(new FileOutputStream("fos.text"));
int len;
byte[] bytes = new byte[1024];
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
bos.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bos != null) {
bos.close();
}
if (bis != null) {
bis.close();
}
}
}
参考链接(本文仅限个人学习交流,支持原创,侵权必删)