33.IO 概述
java 是IO操作 称之为 Java的输入输出流
I 指的是 InputStream 输入流
O指的是OutputStream 输出流
Java是IO操作简单的说就是通过Java代码对文件内容进行 读(in)写(out)操作【读进来写出去】
Java流的分类
按流向分:
输入流:程序可以从中读取数据的流
输出流:程序能向其中写入数据的流
按照数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
按功能分:
节点流:用于直接操作目标设备的流
—基流
过滤流:是对一个已存在流的链接和封装,通过对数据进行处理为程序提供功能强大,灵活的读写功能
—包装流
四大基流:
字节输入流:InputStream
字节输出流:OutputStream
字节输入流:Reader
字符流出流:Weiter
34.字节流出流
第一种方式
public void test05() throws Exception{
OutputStream out = new FileOutputStream("E:/123/aaa.txt");
out.write(100);
out.close();
}
第二种方式
public void test05() throws Exception{
OutputStream out = new FileOutputStream("E:/123/aaa.txt");
byte[] data = "hello world".getBytes();
out.write(data);
out.close();
}
第三种 追加模式
public void test05() throws Exception{
OutputStream out = new FileOutputStream("E:/123/aaa.txt",true);
byte[] data = "hello world".getBytes();
out.write(data);
out.close();
}
第四种方式
public void test05() throws Exception{
OutputStream out = new FileOutputStream("E:/123/aaa.txt",true);
byte[] data = "abcdefghijklmn".getBytes();
out.write(data,3,9);
out.close();
}
35.字节输入流
第一种方式
public void test06() throws Exception {
InputStream in = new FileInputStream("E:/123/aaa.txt");
int read1 = in.read();
int read2 = in.read();
int read3 = in.read();
int read4 = in.read();
in.close();
}
第二种方式
public void test06() throws Exception {
InputStream in = new FileInputStream("E:/123/aaa.txt");
byte[] data = new byte[30];
int i = in.read(data);
本次读取的个数
System.out.println(i);
String s = new String(data,0,i);
in.close();
}
———-循环读取文件内容
public void test06() throws Exception {
InputStream in = new FileInputStream("E:/123/aaa.txt");
byte[] data = new byte[30];
int length = 0;
StringBuilder sb = new StringBuilder();
while( (length = in.read(data)) > 0 ){
sb.append(str);
}
System.out.println(sb);
in.close();
1.2包装流-对象包装流
当我们在java中写了一句代码 People p1 = new People("zhangsan",18); 此时我们运行程序 首先在cpu中会分配一个进程给JVM。JVM进行类加载... 执行代码 遇到我们写的这句代码 就会在JVM的 堆区创建对象内存
存储对象信息
当我们代码执行结束 JVM退出 进程就释放了。 我们如果想将堆区对象数据 持久化到硬盘中 就需要使用 对象包装流。
1.3对象序列化
java.io.NotSerializableException: com.aaa.day01.test09.Role 当我们将Role 对象使用对象流输出到指定文件中的时候 此时抛出这个异常:Role 未序列化异常
序列化: 将 java对象转换成 二进制数据流的过程
反序列化: 将 二进制数据流 还原成 java对象的过程
在IO操作 为什么称之为 输入输出流? 就是输出输入的是二进制数据流 那次是我们的Role 没法序列化 意思就是说 这个对象转换不成二进制数据流 此时 IO就无法将其输入 输出
创建了一个接口,如果你的类希望使用底层的序列化操作 那么你就实现这个接口 如果你不希望当前类被序列化 则不实现这个接口 所以这个接口的作用就是 : 添加标记 public class Role implements Serializable {}
到这里基本上Java 基础都总结结束了