我们这次介绍的是4对输入输出流类,FileOutputStream和FileInputStream、BufferedOutputStream和BufferedInputStream、DataOutputStream和DataInputStream、PipedOutputStream和PipedInputStream。这里我只介绍四组,在上篇文章的继承层次中还有好几个类,读者可以根据Java的帮助文档学习。
上面介绍的这四组输出输入流类都是对应字节流,传递的都是字节。
1 FileOutputStream和FileInputStream
FileOutputStream文件输出流是用于将数据写入File
或FileDescriptor
的输出流。创建的时候需要一个File对象或者FileDescriptor(当然还有其他的构成方法,我们不可能一一罗列)。我们可以调用write方法将一个字节数组作为参数,写入到流中。我们传递的字节数组我们也可以指定写入字节的大小。
FileInputStream
从文件系统中的某个文件中获得输入字节。创建的时候需要一个File对象或者FileDescriptor对象。我们可以用read方法将数据读取到我们创建的字节数组中。
这两个流类在使用完了之后我们要记着关闭这个流。下面我们看一个例子:
对于这个两个类都是传输的字节流,我们可以在我们的C盘下看到,生成了一个1.txt文件,我们打开看到是我们输入的值。
这种对于硬盘的读写是我们每次有数据就进行写入,每次需要读取,就去读取硬盘。当然我们知道访问硬盘的速度是比较慢的,频繁的访问硬盘,必定会影响我们程序运行的速度。Java中给我们提供了一种更高效的读写:带缓冲的读写。这就需要介绍我们上面写的第二对类了。
2 BufferedOutputStream和BufferedInputStream
带缓冲的读写,是我们在写文件的时候先将数据写入缓冲区,当缓冲区满的时候,或者我们人为地刷新缓冲区才去访问外存写入硬盘。当然我们读取的时候也是按照这个原理的,这样我们访问硬盘的次数少了,也就提高了我们读写的速度,在数据量比较大的时候,这个是比较高效的。
BufferedOutputStream:该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
BufferedInputStream:BufferedInputStream
为另一个输入流添加一些功能,即缓冲输入以及支持mark
和reset
方法的能力。在创建BufferedInputStream
时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark
操作记录输入流中的某个点,reset
操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次mark
操作后读取的所有字节。
这两个类创建的时候都需要对应的字节流OutputStream或者InputStream类的对象。
下面我们看一个例子程序:
对于这个程序说明几点:我们如果去掉9和10行,我们看到的文件并不会写入到文件,因为缓冲未满人为也没有刷新,所以不会写入。我们加上9行或者10行代码的任何一行都会写入,在我们关闭输出流或者人为刷新的时候都会将数据写入。这里我们分别用FileOutputStream对象fos作为参数创建了BufferedOutputStream对象bos,用FileInputStream对象fis作为参数创建了BufferInputStream对象bis。
如果哪里写错了,请读者指出。
分享到:
相关推荐
“存在及合理”我们看看这些字节流中不太对称的几个类吧! LineNumberInputStream 主要完成从流中读取数据时,会得到相应的行号,至于什么时候分行、在哪里分行是由改类主动确定的,并不是在原始中有这样一个行号。...
Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来...
javaIO的基础File类,适合小小白啥都不会的第一次学Java的小朋友相信看完这几个文档和代码你就大概知道IO在做什么了。然后后面再继续学习。基本上不管学什么都是一个记忆和积累的过程小小白白们共勉。
节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
6、初步掌握几个常用类和接口的含义和使用。 ★专题:文件IO和数据库编程★ 1、掌握File类的使用。 2、掌握字节流IO的操作。 3、掌握字符流IO的操作。 4、初步掌握随机流操作。 5、掌握Java数据库开发(JDBC操作)...
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多...
更改组建外观,对日历设置几个显示外观(lookandfeel.java);自定义对话框DialogWindows;制作欢迎界面SplashWindow.java; 10 java图形 一个圆形按钮,当单击按钮时颜色发生变化CircleButton.java; 捕捉屏幕相当于...
10. Io有哪些流,字节流和字符流的区别 11. String常用api 12. 自动拆装箱发生 13. Collections提供的工具方法 14. String、StringBuffer和StringBuilder区别 15. Map的键和值可以为null吗,为什么 16. 集合...
Java面试题通常涵盖以下几个方面: 基础知识:包括Java语法、数据类型、运算符、流程控制等基本概念和特性。 面向对象编程:涉及类与对象、继承、多态、封装、抽象类、接口等面向对象编程的相关概念和原则。 集合...
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化...
在准备Java面试时,我们需要掌握以下几个方面的知识:核心Java、常见算法、多线程与并发、设计模式等。这些内容不仅是面试的重要考点,也是我们在实际工作中需要掌握的基本技能。接下来,小编将从这些方面为大家做...
B) 在Java的类中可以有三类内容分别是数据的定义、基本输出语句、函数的定义。 C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以...
《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...
个集合,还有几个正在进行中。 一个集合 集合是一个 maven java 项目,其中每个类都有一个main(...)方法或实现java.util.function.Function 。 JavaX 支持 OpenJDK 1.8.0、Guava 23.0、Jackson 2.9.6。 自定义堆栈也...