`
blogfeifei
  • 浏览: 1197023 次
文章分类
社区版块
存档分类
最新评论

JavaIO 3—几个基本的流类介绍(上)

 
阅读更多

我们这次介绍的是4对输入输出流类,FileOutputStream和FileInputStream、BufferedOutputStream和BufferedInputStream、DataOutputStream和DataInputStream、PipedOutputStream和PipedInputStream。这里我只介绍四组,在上篇文章的继承层次中还有好几个类,读者可以根据Java的帮助文档学习。

上面介绍的这四组输出输入流类都是对应字节流,传递的都是字节。

1 FileOutputStream和FileInputStream

FileOutputStream文件输出流是用于将数据写入FileFileDescriptor 的输出流。创建的时候需要一个File对象或者FileDescriptor(当然还有其他的构成方法,我们不可能一一罗列)。我们可以调用write方法将一个字节数组作为参数,写入到流中。我们传递的字节数组我们也可以指定写入字节的大小。

FileInputStream 从文件系统中的某个文件中获得输入字节。创建的时候需要一个File对象或者FileDescriptor对象。我们可以用read方法将数据读取到我们创建的字节数组中。

这两个流类在使用完了之后我们要记着关闭这个流。下面我们看一个例子:

对于这个两个类都是传输的字节流,我们可以在我们的C盘下看到,生成了一个1.txt文件,我们打开看到是我们输入的值。

这种对于硬盘的读写是我们每次有数据就进行写入,每次需要读取,就去读取硬盘。当然我们知道访问硬盘的速度是比较慢的,频繁的访问硬盘,必定会影响我们程序运行的速度。Java中给我们提供了一种更高效的读写:带缓冲的读写。这就需要介绍我们上面写的第二对类了。

2 BufferedOutputStream和BufferedInputStream

带缓冲的读写,是我们在写文件的时候先将数据写入缓冲区,当缓冲区满的时候,或者我们人为地刷新缓冲区才去访问外存写入硬盘。当然我们读取的时候也是按照这个原理的,这样我们访问硬盘的次数少了,也就提高了我们读写的速度,在数据量比较大的时候,这个是比较高效的。

BufferedOutputStream:该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。

BufferedInputStream:BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持markreset 方法的能力。在创建BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次mark 操作后读取的所有字节。

这两个类创建的时候都需要对应的字节流OutputStream或者InputStream类的对象。

下面我们看一个例子程序:

对于这个程序说明几点:我们如果去掉9和10行,我们看到的文件并不会写入到文件,因为缓冲未满人为也没有刷新,所以不会写入。我们加上9行或者10行代码的任何一行都会写入,在我们关闭输出流或者人为刷新的时候都会将数据写入。这里我们分别用FileOutputStream对象fos作为参数创建了BufferedOutputStream对象bos,用FileInputStream对象fis作为参数创建了BufferInputStream对象bis。

如果哪里写错了,请读者指出。

分享到:
评论

相关推荐

    Java之IO流学习总结

    “存在及合理”我们看看这些字节流中不太对称的几个类吧! LineNumberInputStream 主要完成从流中读取数据时,会得到相应的行号,至于什么时候分行、在哪里分行是由改类主动确定的,并不是在原始中有这样一个行号。...

    Java 中IO流分为哪几种? BIO、NIO、AIO有什么区别?

    Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来...

    day34IO流基础File类.rar

    javaIO的基础File类,适合小小白啥都不会的第一次学Java的小朋友相信看完这几个文档和代码你就大概知道IO在做什么了。然后后面再继续学习。基本上不管学什么都是一个记忆和积累的过程小小白白们共勉。

    Java 基础核心总结 +经典算法大全.rar

    节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    实验项目D、Java应用专题编程

    6、初步掌握几个常用类和接口的含义和使用。 ★专题:文件IO和数据库编程★ 1、掌握File类的使用。 2、掌握字节流IO的操作。 3、掌握字符流IO的操作。 4、初步掌握随机流操作。 5、掌握Java数据库开发(JDBC操作)...

    java 面试题 总结

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多...

    java jdk实列宝典 光盘源代码

    更改组建外观,对日历设置几个显示外观(lookandfeel.java);自定义对话框DialogWindows;制作欢迎界面SplashWindow.java; 10 java图形 一个圆形按钮,当单击按钮时颜色发生变化CircleButton.java; 捕捉屏幕相当于...

    Java 基础面试题

    10. Io有哪些流,字节流和字符流的区别 11. String常用api 12. 自动拆装箱发生 13. Collections提供的工具方法 14. String、StringBuffer和StringBuilder区别 15. Map的键和值可以为null吗,为什么 16. 集合...

    北京百度java面试题大全

    Java面试题通常涵盖以下几个方面: 基础知识:包括Java语法、数据类型、运算符、流程控制等基本概念和特性。 面向对象编程:涉及类与对象、继承、多态、封装、抽象类、接口等面向对象编程的相关概念和原则。 集合...

    超级有影响力霸气的Java面试题大全文档

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化...

    1000道互联网Java工程师面试题.pdf

    在准备Java面试时,我们需要掌握以下几个方面的知识:核心Java、常见算法、多线程与并发、设计模式等。这些内容不仅是面试的重要考点,也是我们在实际工作中需要掌握的基本技能。接下来,小编将从这些方面为大家做...

    java经典面试2010集锦100题(不看你后悔)

    B) 在Java的类中可以有三类内容分别是数据的定义、基本输出语句、函数的定义。 C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...

    java8集合源码-samples:示例代码

    个集合,还有几个正在进行中。 一个集合 集合是一个 maven java 项目,其中每个类都有一个main(...)方法或实现java.util.function.Function 。 JavaX 支持 OpenJDK 1.8.0、Guava 23.0、Jackson 2.9.6。 自定义堆栈也...

Global site tag (gtag.js) - Google Analytics