「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战」
生命不息,学习不止
题外话
今天是星期二了,不是我哭惨嗷,我真的觉得星期二绝对是所有星期中最难熬的一天,周一因为放假状态可能还没调整好,周二活就变多了,你们指定也有这种感觉对不对,我现在看着我的任务列表,我真是一个头十个大。周二快快过去吧!!!
废话不多说,上货
IO概述
在不考虑负数的情况下,每个字节中的数据,都是0-255之间的值(因为一个字节为8位,最大为255)
如果一个文件中的每个字节或每相邻的几个字节的数据都可以表示成某个字符,则可以将这个文件称为文本文件,其实这是二进制的一个特例
在上一节中使用的是字符流 FileReader FileWriter , BufferedReader BufferedWriter 这些都能和码表对应上
字节流 操作的时候,操作单位都是以字节为单位进行的 操作的对象不一定有码表对应
----所有字节输入流类都是抽象类InputStream的子类
int read() 从源中读取一个字节的数据,返回字节值 //和字符流不同的是,字符流读的是一个字符
int read(byte b[])从源中试图读取b.length个字节到b中,返回实际读取的字节目。
void close()关闭输入流
----所有字节输出流类都是抽象类OutputStream的子类
void write(int n) 向输出流写入单个字节。 //注意,它只写入低的8个比特位
void write(byte b[])向输出流写入一个字节数组
void flush()把缓冲区中内容输出并清空缓冲区(刷新)
void close()关闭输出流
转换流
InputStreamReader, OutputStreamWriter
InputStreamReader 把字节输入流转为字符输入流
public class InputStreamReader extends Reader
OutputStreamWriter 把字节输出流转为字符输出流
public class OutputStreamWriter extends Writer
- InputStreamReader
它有四个构造函数:
InputStreamReader(InputStream in)
InputStreamReader(InputStream in, Charset cs)
InputStreamReader(InputStream in, CharsetDecoder dec) //CharsetDecoder 解码器
InputStreamReader(InputStream in, String charsetName)
2) OutputStreamWriter
它有四个构造函数:
OutputStreamWriter(OutputStream out) //创建使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc) // 创建使用给定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName) // 创建使用给定字符集编码器的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName) // 创建使用指定字符集的 OutputStreamWriter。
例子
从一个输入流中读取数据,变成大写后,存到输出流中
public static void main(String[] args) throws Exception {
InputStream in=new FileInputStream("c:/a.txt");
OutputStream out=new FileOutputStream("c:/b.txt");
transform(in,out);
in.close();
out.close();
transform(System.in,System.out);
}
static void transform( InputStream in , OutputStream out ) throws IOException {
int ch=0;
while( (ch=in.read())!=-1 ) {
out.write(Character.toUpperCase(ch));
}
}
下一篇继续讲文件流,敬请期待
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!