java IO流常用操作之字节流和字符流
在工作中,IO流操作很常见,例如:文件读写操作,文件上传,文件下载等;而涉及到很多的概念及相关类,很容易弄混,那怎么针对不同的应用场景使用相应的流对象,就显得很重要,下面就具体来看一下。
一.主要IO流的分类
通过图可知java 中主要IO流根据处理数据类型的不同分为字符流和字节流,根据数据流向不同分为输入流和输出流。
二. 使用场景
1.考虑最原始的数据格式是什么:场景一. 原始数据是二进制或者是纯文本,使用方式如下:(1). 二进制格式(只要不能确定是纯文本的):InputStream,OutputStream及其子类(字节流)。
(2). 纯文本格式(含纯英文与汉字或其他编码方式):Reader,Writer及其子类(字符流)。
场景二:IO数据流通道:
(1). 输入:Reader,InputStream类型的子类。
(2). 输出:Writer,OutputStream类型的子类。
场景三:IO流转换:
(1). 字节到字符:InputStreamReader
(2). 字符到字节:OutputStreamWriter
场景四:数据来源流向:
(1). 文件:FileInputStream,FileOutputStream ; FileReader,FileWriter
(2). byte[]: ByteArrayInputStream, ByteArrayOutputStream
(3).Char[]:CharArrayReader,CharArrayWriter
(4).String:StringBufferInputStream,StringBufferOutputStream;StringReader,StringWriter
(5).网络数据流:InputStream,OutputStream;Reader,Writer
场景五:缓冲:(要注意readLine()是否有定义,有什么比read(),writer()更特殊的输入或输出方法)
要缓冲:BufferedInputStream, BufferedOutputStream; BufferedReader, BufferedWriter
场景六:格式化输出:
格式化输出:PrintStream, PrintWriter
三.主要字节流常用方法(1).InputStream字节流
// 从输入流中读取数据的下一个字节
abstract int read()
// 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中
int read(byte[] b)
// 将输入流中最多 len 个数据字节读入 byte 数组
int read(byte[] b, int off, int len)
// 跳过和丢弃此输入流中数据的 n个字节
long skip(long n)
// 关闭此输入流并释放与该流关联的所有系统资源
void close()
(2).OutputStream字节流
// 将 b.length 个字节从指定的 byte 数组写入此输出流
void write(byte[] b)
// 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
void write(byte[] b, int off, int len)
// 将指定的字节写入此输出流
abstract void write(int b)
// 关闭此输出流并释放与此流有关的所有系统资源
void close()
// 刷新此输出流并强制写出所有缓冲的输出字节
void flush()
四.主要字符流常用方法(1). Reader
// 读取单个字符
int read()
// 将字符读入数组
int read(char[] cbuf)
// 将字符读入数组的某一部分
abstract int read(char[] cbuf, int off, int len)
// 跳过字符
long skip(long n)
// 关闭该流并释放与之关联的所有资源
abstract void close()
(2). Writer
// 写入字符数组
void write(char[] cbuf)
// 写入字符数组的某一部分
abstract void write(char[] cbuf, int off, int len)
// 写入单个字符
void write(int c)
// 写入字符串
void write(String str)
// 写入字符串的某一部分
void write(String str, int off, int len)
// 将指定字符添加到此 writer
Writer append(char c)
// 将指定字符序列添加到此 writer
Writer append(CharSequence csq)
// 将指定字符序列的子序列添加到此 writer.Appendable
Writer append(CharSequence csq, int start, int end)
// 关闭此流,但要先刷新它
abstract void close()
// 刷新该流的缓冲
abstract void flush()
注:其它详细可参考:https://www.cnblogs.com/shuaiguoguo/p/8883862.html
以上是 java IO流常用操作之字节流和字符流 的全部内容, 来源链接: utcz.com/p/216550.html