导图社区 Java IO(蓝旭第三次培训预习)
介绍了常见的java_io流,Java的IO流是用于在Java应用程序中处理输入和输出操作的一系列类和接口。
编辑于2024-04-06 17:07:56- Java IO
- 简介
- 定义: 使用Java执行输入输出操作
- 目的: 访问不同数据源和目的地
- 分类: java.io 和 java.nio
- 流的分类
- 输入流 vs 输出流
- 字节流 vs 字符流
- 节点流 vs 处理流
- 其他: 转换流, 缓冲流, 对象流
- 四大基流
- 字节流
- OutputStream
类下的三个方法
write
public void write(byte b[], int off, int len) throws IOException 其意思为将字节数组b中从off开始的len长度的字节输出到外界的目标区域去.
flush
这个方法的意思就是强制将缓冲区中的数据输出到目标设备,并清空缓冲区,以避免数据滞留.一般而言要在输出的最后flush一下,确保不会有残余数据留在缓冲区中.
close
这个方法的意思就是把这个输出流关闭.在输出流关闭之后,这个流就废了,啥事也不能干.
首先,创建一个Out...对象,参数为文件。然后再使用这个参数的write方法,参数为字节数组,字节数组由String对象通过getByte()方法转化而来
- InputStream
read
public abstract int read() throws IOException 意为读取一个字节,并返回读取到的这个字节的int形式变量.
public int read(byte b[], int off, int len) throws IOException 和 public int read(byte b[]) throws IOException与之前的说到的输出流意思几乎一样,只不过这个是输入到b数组里边去.返回值为读取到的字节总数.
skip
public long skip(long n) throws IOException这个方法的意义是从输入流中跳过数个字节,返回值就是实际上跳过的字节数.其返回值和n不一定相等,原因是有可能剩下没有足够的字节数供其跳过.一般而言,这个方法是用来跳过输入流中不必要的内容的,例如说空格,换行,制表符之类的.
available
close
这个方法代表着对输入流的关闭,释放系统资源. 当然也可以使用try-with-resources语句自动关闭输入流.这样就不需要显式地调用close方法了.
重复性地读入数据
mark
public synchronized void mark(int readlimit)方法用来在流中放置一个标记,并且说明从这个标记处往后最多读readlimit个字节,标记都是有效的.这个标记地位置其实就是当前流的位置.
reset
public synchronized void reset() throws IOException方法用来将流重新定位到之前的标记处.如果之前没有调用过mark方法或者已经超出了readlimit的限制就会报异常,这样一来就相当于可以从流的一个标记出发,反复地读取readlimit字节长度的数据
markSupported
当然了,要能使用mark和reset,必须要确保这个输入流能够支持.因此需要先利用markSupported方法询问是否可以使用
定义一个inputstream类,再调用其方法,可惜的是这里读写的指针无法往回,这里的输出必须使用char强制转换,否则乱码
- 字符流
- Writer
类下的四个方法
write
abstract public void write(char cbuf[], int off, int len) throws IOException, 其意义为将字符数组cbuf中从off开始的len长度的字节输出到外界的目标区域去.
append
public Writer append(CharSequence csq, int start, int end) throws IOException,其意义为将字符序列csq的start~end-1这个子串追加到输出区域.
重载:public Writer append(char c) throws IOException,其意义为往后追加一个字符c.
flush
close
- Reader
read
skip
ready
这个方法就是用于判断是否可以从输入流中读取数据而不会被阻塞.
markSupported
mark
reset
close
这里的date必须为int型,传递ASCII码
- 常用流
- 字节输入流和字节输出流
- 字符输入流和字符输出流
- 打印流和缓冲流
- 字节数组流
- ByteArrayInputStream
- ByteArrayOutputStream
处理流(包装另一个流,参数为流)
- 数据流
- DataInputStream
- DataOutputStream
在使用DataOutputStream写入基本数据类型时,它们是以二进制形式写入文件的。因此,如果直接打开这个文件会看到一些不可读的乱码。这是因为这些二进制数据在文本编辑器中被错误地解释为字符编码,并因此显示为乱码。 如果你想以可读的形式查看文件中的数据,可以使用DataInputStream来读取这些基本数据类型,并将它们转换为其他可读形式。(图片给了下面转换流的例子,因为不充会员只能放五张图片)
- 转换流
- InputStreamReader
- OutputStreamWriter
转化的意思:使用OutputStreamWriter将一个字节流(FileOutputStream)转换为字符流,并指定字符编码为UTF-8。使用InputStreamReader将一个字节流(FileInputStream)转换为字符流,并指定字符编码为UTF-8。体现在途径上,就像中游的水质发生改变,体现了包装的特点
- 对象流
- ObjectInputStream
- ObjectOutputStream
序列化的意思:把一个对象转化为二进制形式
- 随机访问流
- RandomAccessFile
- 使用方法
- 选择合适流类型
- 创建流对象
- 运用流方法
- 关闭流释放资源(try with resourse)
- 注意事项
- 异常处理
- 输入验证
- 序列化要求
- 随机访问流的特殊操作