JAVA的IO系统 笔记

对于JAVA的IO系统,从开始学习JAVA开始到现在,一直都晕的很
后来工作了也没有用到,到了再后来,能看懂IO的程序!但是自己去写就麻烦了,一点都没有头绪

很多东西都搞不清除!这个假期决定要一步步的攻克自己的弊端! 呵呵

今天晚上从IO开始! 变学习变写这篇文章!希望能在文章结束的时候能搞定IO!

首先: “流”的理解

在JAVA中,一组有序的数据序列称为“流”

流分为输入流和输出流两种!

JAVA的IO系统负责的就是程序的输入和输出! 好好看看java.io包!虽然这个包很复杂。 头晕!

IO流: 1: 字节流 java.io.InputStream / java.io.OutputStream

2:字符流 java.io.Reader / java.io.Writer

疑问: 搞不懂他们,如果简单的认为字节流是数据流中最小的数据单元是字节,字符流中最小的数据单元是字符,做开发的时候就像我一样,头晕。

字节流是最基本的! 字节流主要是用在二进制数据

字符流是基础与字节流之上!处理UNICODE数据

有个问题就是 JAVA开发中所有的中文问题都是由字节流转换成字符流的时候发生的!

记得在一篇文章上看到过一个写关于字节流和字符流相关的东西!

叫做“搬苹果”, 现在有一对苹果,你怎么搬呢,用字节流是一个一个搬,字符流是做一个箱子然后把苹果装进箱子然后再搬! 大概意思就是这个样子了,所以听了感觉就是,字符流是字节流的包装体了,事实上就是这个样子的。但这样说的话,好像是感觉字符流的效率要好过字节流了,不是这个样子的,这个故事就是说明白了字节流是和字符流的运作过程!后来和同事谈起来这个事情,他说的很好,他说字节流效率好!没有了。后来又一位同事说:1:字节流速度快 2:字符流是通过字节流转换的 所以这个故事和最后的答案都出来了!

这就是我对上面这个问题:字节流和字符流的区别的理解。

在网上找了很多IO的示例程序! 采用的IO的类或者接口可是说是让人头晕的很,所以不学习下IO的常用类或者接口是不行的啊 呵呵

从字节流开始:

InputStream :抽象类,是所有字节输入流的超类

子类: ByteArrayInputStream: 把字节数组转换为输入流,把内存中的一个缓冲区作为InputStream 使用


FileInputStream : 从文件中读取数据,把一个文件作为InputStream,实现对文件的读取操作

PipedInputStream : 连接一个PipedInputStream,实现了pipe的概念,主要在线程中使用

SequenceInputStream : 把几个输入流转换为一个输入流,把多个InputStream合并为一个InputStream

ObjectInputStream :对象输入流

FilterInputStream :装饰器,具有扩展其他输入流的功能

OutputStream:抽象类,是所有字节输出流的超类

子类: ByteArrayOutputStream : 向字节数组(内存的缓冲区)中写数据,把信息存入内存中的一个缓冲区中


FileOutputStream :向文件中写数据,把信息存入文件中


PipedInputStream :向管道中输出数据,与PipedInputStream搭配使用,实现了pipe的概念,主要在线程中使用

ObjectOutputStream :对象输出流

FilterOutputStream :装饰器,扩展其他输出流的功能

字节输入流和输出流的所有类都在这里总结,大概意思就是这样!慢慢加深理解。

字符流: (处理字符流最大的问题是进行字符编码的转换)

Reader : 读取字符流的抽象类

子类:

CharArrayReader : 适配器,把字符数组转换为Reader,从字符数组中读取字符,与ByteArrayInputStream对应

BufferedReader : 装饰器,为其他的Reader提供缓冲区。

LineNumberReader:装饰器,为其他的Reader提供缓冲区,并且可以跟踪字符输入流中的行号

StringReader : 适配器,把字符串转换为Reader,从字符串中读取字符

PipedReader :连接一个PipedWriter

FilterReader : 装饰器,扩展其他的Reader的功能

InputStreamReader : 适配器,把InputStream转换为Reader,可以指定数据源的字符编码

FileReader : 从文件中读取字符

Writer : 写入字符流的抽象类

子类:

CharArrayWriter : 适配器,把字符数组转换为Witer,向字符数组中写字符

BufferedWriter ; 装饰器,为其他的Writer提供写缓冲区

StringWriter :适配器,把StringBuffer转换为Writer,向StringBuffer中写字符

PipedWriter :连接一个PipedReader

FilterWriter :装饰器,扩展其他的Writer的功能

PringWriter :装配器,输出格式化数据

OutputStreamWriter : 适配器,把OutputStream 转换Writer ,可以指定数据汇的字符编码

FileWriter : 向文件中写字符



File 类

File类提供了管理文件或目录的方法。File实例表示真实文件系统中的一个文件或者目录。



简单程序例子: 这里是一个BufferedReader的例子,BufferedReader为其他的Reader提供了缓冲区,效率高

定义两个文件,从文件1中读取字符数据,然后写入文件2中去。

public class demo {

public static void main(String[] args) throws IOException{

File read=new File("F:\\1.txt");
File write=new File("F:\\2.txt");

try {

BufferedReader br=new BufferedReader(new FileReader(read));

BufferedWriter bw=new BufferedWriter(new FileWriter(write));

String temp=null;

temp=br.readLine();
while(temp!=null){
//写文件
bw.write(temp);

temp=br.readLine();
}
bw.close();
br.close();

} catch (FileNotFoundException e) {

e.printStackTrace();
}

}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值