2020-8-10 IO流_02

IO流:

概述:

IO流用来处理设备之间的数据传输,上传文件和下载文件;

java对数据的操作是通过流的方式进行;

java用于操作流的对象都在IO包中;

分类:

根据数据流向:

输入流 读入数据;

输出流 写出数据;

按照数据类型:

字节流

字符流;

使用:

如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流,其他用字节流(诸如图片,视频等);

如果不清楚,就用字节流;

IO流常用基类:

字节流的抽象基类:

InputStream,OutputStream;

字符流的抽象基类:

Reader,Writer;

注:

由这四个类派生出的子类名都是以父类名作为子类名的后缀;

如:

InputStream的子类FileInputStream;

Reader的子类FileReader;

FileOutputStream:

构造方法:

1.FileOutputStream(File file);

2.FileOutputStream(String File);

3.FileOutputStream(File file,boolean append):如果第二个参数为true,则将字节写入末尾处,而不是写入文件开始处:

创建字节流输出对象执行的操作:

1.调用系统功能去创建文件;

2.创建输出流对象;

3.把输出流对象指向文件;

写入数据:

1.public void write(int b):写一个字节;

2.public void write(byte[] b):写一个字节数组;

3.public void write(byte[] b,int off,int len):写一个字节数组的一部分;

异常处理:

重点:close()放入finally中;

在对象调用close()方法前判断对象是否为null;

为什么一定要close():

1.让流对象变成垃圾,这样就可以被垃圾回收器回收;

2.通知系统去释放跟该文件相关的资源;

换行符:

windows:\r\n;

linux:\n;

mac:\r;

高级记事本,可以识别任意换行符号;

FileInputStream:

字节输入流创建执行的步骤:

1.创建字节输入流对象;

2.调用read()方法读取数据,并把数据显示在控制台;

3.释放资源;

读取数据:

1.public int read():一次读取一个字节;

2.oublic int read(byte[] b):一次读取一个字节数组;

循环读取并写入:

方式1(逐字节读取):
FileInputStream is=new FileInputSream("java.txt");

FileOutputStream os=new FileOutputStream("javaWeb.txt");

int by=0;

while((by=is.read)!=-1){

	os.write(by);
	}
方式2(字节数组读取):
对象就调用方式1的;

int len=0;

byte[] bys=new byte[1024]

while((len=is.read)!=-1){

	os.write(bys,0,len);
	}

计算机如何识别什么时候该把两个字节转换为一个中文:

在计算机中中文的存储分为两个字节;

第一个字节肯定是负数;

第二个字节常见的是负数,可能有正数,但不影响;

字节缓冲流:

字节缓冲输出流:

BufferedOutputstream
构造方法:
1.BufferedOutputstream(OutputStream out);

2.BufferedOutputStream(OutputStream out,size):指定缓冲区大小;

字节缓冲输入流构造方法和这个差不多;

为什么传递输入/输出流对象:

因为字节缓冲流仅仅提供缓冲区,为高效设计,真正的读写还得靠基本流对象实现;

字符流:

字节流操作中文不是很方便,所以,java就提供了转换流;

字符流=字节流+编码表;

编码表:

由字符及其对应的数值组成的一张表;
常见编码表:
ASCII字符集:美国标准信息交换表;

Unicode表:国际标准码;

ISO-8859-1:拉丁码表,8为一数据;

GB2312/GBK/GB18030:中国的中文编码表;

BIG 5:台湾,香港地区的繁体字编码方案;

UTF-8:最多用3字节表示一字符;

编码与解码:

解码:

Public String(byte[] bys,String charsetName):通过指定的字符集解码字节数组;

编码:

byte[] getBytes(String charsetName):使用指定的字符集把字符串编码为字节数组;

构造方法:

OutputStreamWriter(OutputStream out):字符流,把字节流转换为字符流;

可简写为:FileWriter(String pathname);

OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流转换为字符流;

字符输入流和这个差不多;

写数据(OutputStreamWriter):

1.public void write(int i):写一个字符;

2.public void write(char[] cbuf):写一个字符数组;

3.public void write(char[] cbuf,int off,int len):写一个字符数组的一部分;

4.public void write(String str):写一个字符串;

5.public void write(String str,int off,int len):写一个字符串的一部分;

读数据(InputStreamReader):

1.public int read():只读一个字符;

2.public int read(char[] cbuf):一次读一个字符数组;

字符缓冲流:

字符流为了高效读写,也提供了对应的字符缓冲流;

BufferedWriter;

BufferedReader;
构造方法:
BufferedWriter bs=new BufferedWriter(new OutputStreamWriter osw(new FileOutputStream(String pathname)));

简化版:BufferedWriter bs=new BufferedWriter(FileWriter(String pathname));

字符输入流同理;

特殊功能:

BufferedWriter:

void newLine();

BufferedReader:

String readLine(); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值