节点流

节点流:
  理解流的概念:
    .流是字节序列的抽象概念
    .文件是数据的静态存储形式,而流是指数据传输时的形态。
       文件只是流可操作的io设备之一,除了文件流还有网络流,内存流等等。
       java提供了众多可操作流的类
    .流类分为两个大类:节点流类和过滤流类(也叫处理流类)。


   inputStream类
     程序可以从中连续读取字节的对象叫输入流,在java中,用InputStream类来描述所有输入流的抽象概念。
     InputStream类得方法:
 int read()
   结束返回-1
   如果没有结束,通道没有关闭,read()就会发生阻塞。
   read()只读取一个字节的内容
   二进制形式为11111111的数据,以byte类型表示为-1,以int类型表示为255,返回int的好处是返回最大值是255,最小值是0,不可能有-1出现,这样就可以与表示流的结束的-1进行区别。
  int read(byte[] b)
    读取的数据以int的范围为准,一个都读不到会发生阻塞。
  int read(byte[] b, int off, int len)
  int skip(long n)
    跳过n个字节再读取
  int available()
    在读取之前调用,检查流中是否有数据,如果有可以读取,以免发生阻塞。单独一个线程开一个read方法,这样减少cpu的开销。
  void mark(int readlimit)
    在输入流中建立一个标记
  void reset()
    和mark配合使用
  boolean markSupported()
  void close()
    关闭流,释放与流相关的资源。

   有了垃圾回收器,为什么还要调用close方法?
 计算机内存中产生了两个事物,一个是java程序的类实例对象,一个是系统产生的某种资源,而java回收器只能管理java的类实例对象,而不会去管系统产生的资源,所以需要调用close来关闭系统的资源。


OutputStream类
  程序可以向其中连续写入字节的对象叫输出流,在java中,用OutputStream类来描述所有输出流的抽象概念。

  OutputStream类得方法:
 void write(int b)
 void write(byte[] b)
 void write(byte[] b, int off, int len)
 void flush()
   read的数据先放入内存缓冲区,再从缓冲区输出到程序。
   内存缓冲区中的内容清出内存,输出。
 void close()

张老师一个关于io缓冲区的刻骨铭心的经历:
 查看程序崩溃前执行动作的记录,然后重演,推算出程序崩溃的原因。曾经的一个web邮件系统,用这个方法没有找到程序崩溃的原因。后来用flush方法找到了原因。以后可以直接调用close关闭资源。


FileInputStream与FileOutputStream类
  FileInoutStream和FileOutputStream类分别用来创建磁盘文件的输入流和输出流对象,通过它们的构造函数来指定文件路径和文件名。
  创建FileInputStream实例对象时,指定的文件应当是存在和可读的。创建FileOutputStream实例对象时,如果指定的文件已经存在,这个文件中的原来内容将被覆盖清除。
  对同一个磁盘文件创建FileInputStream对象的两种方式:
 1.FileIputStream inOne = new FileInputStream("hello.test");
 2.File f = new File("hello.test");
   FileInputStream inTwo = new FileInputStream(f);
创建FileOutputStream实例对象时,可以指定还不存在的文件名,不能指定一个已被其他程序打开了的文件。

思考:要将A文件的内容写入B文件,在程序代码中,是用输出类对象,还是用输入类对象来连接A文件并完成对A文件的操作呢?
 记住:输入和输出的概念是相对与程序而言的,而不是相对于文件而言的。所以,我们应该用一个输入类与A关联,输出类与B关联。
 编程举例:用FileOutputStream类向文件中写入一个字符串,然后用一个FileInputStream读出写入的内容。

 

Reader与Writer类
Reader和Writer是所有字符流类得抽象基类,用于简化对字符串的输入输出编程,即用于读写文本数据。

二进制文件和文本文件的区别。
 各种文件文件都是由一个或多个字节组成的。
 文本文件只是二进制文件的一种特例。
 如果一个文件专用于存储文本字符,而没有包含字符之外的其他数据就称之为文本文件,除此之外的文件就是二进制文件。Reader与Writer类主要用于读写文本格式的内容,而InputStream类和OutputStream类则主要用于读写二进制格式的内容。

FileOutputStream没有用close,也将数据写入了文件中。
他的write仅仅只写入一个字节,内部可能调用了flush()。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值