工作三年了,可自己对文件读写还是一知半解,写代码的时候都不知道从何下手(其实也可以说是从哪个类下手),什么时候用FileInputStream,什么时候用BufferedInputStream,什么时候用缓冲机制?输入输出流都底是什么东东?为什么要用流呢?
带着种种问题,我开始了JAVA深入浅出流之篇的总结。
Program often need to communicate with the outside world. The means of communication are input(such as a keyboard)and output(such as the computer screen).Program can also communicate through stored data, such as file.
程序经常需要与外界进行通信,通信的方式就是输入和输出,输入的功能就像键盘的功能一样,输出的功能类似于电脑的屏幕。程序也可以通信与已存储数据,比如文件。
问题一:输入、输出是是基于什么形式呢?
一:输入/输出流
一个流就是程序与外界通信的一条通道,它可以用来连续的传送数据项。
Input/Output(I / O)流表示输入源或输出目的地。一个流可以代表许多不同种类的来源和目的地,包括磁盘文件,设备,其他的程序,存储器阵列(memory arrays)。
Streams support many different kinds of data, including simple bytes, primitive data types, localized characters, and objects. Some streams simply pass on data; others manipulate and transform the data in useful ways.
流支持许多不同类型的数据,包括简单的字节、原始数据类型、本地化字符和对象。有些流只是简单的传 送数据,还有些流以适当的方式操纵并转换数据。
不管它们内部是怎么工作的,所有的流对使用它们的程序来说呈现出同样的、简单的模型,那就是: 流是一个序列的数据。
Reading information into a program.
A program uses an input stream to read data from a source, one item at a time:
Writing information from a program.
A program uses an output stream to write data to a destination, one item at time:
二:流的分类
可以从不同的角度对流进行分类:
1. 处理的数据单位不同,可分为:字符流,字节流
2. 数据流方向不同,可分为:输入流,输出流
3. 功能不同,可分为:节点流,处理流
字节流(Byte Streams):
字节流是执行基于8位字节的输入和输出,它一次读写一字节的数据。字节流是I / O的最底层流技术,因此,如果你正在阅读或写入字符数据的最佳方法是使用字符流。其他流类型是建立在字节流之上的(如Java中的InputStream、OutputStream)。
字符流(Chcaracter Streams):
字符流是执行基于16位字节(即两字节)的输入和输出,它一次读写一个字符(两个字节)的数据。所有的字符流类都是从Reader、Writer两个类延伸下来的,我们可以使用FileReader、FileWriter类进行读写I/O文件
Byte Streams |
Character streams |
Operated on 8 bit (1 byte) data. |
Operates on 16-bit (2 byte) unicode characters. |
Input streams/Output streams |
Readers/ Writers |
1. 和 2. 都比较好理解,对于根据功能分类的,可以这么理解:节点流:节点流从一个特定的数据源读写数据。即节点流是直接操作文件,网络等的流,例如FileInputStream和FileOutputStream,他们直接从文件中读取或往文件中写入字节流。
处理流:
“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能。过滤流是使用一个已经存在的输入流或输出流连接创建的,过滤流就是对节点流进行一系列的包装。例如BufferedInputStream和BufferedOutputStream,使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率,以及DataInputStream和DataOutputStream,使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。他们都属于过滤流。
总结流的特点(Stream):
A stream is a sequence of data, of no particular length.
- Java classes can be categorised into two groups based on the data type one which they operate:
- Byte streams
- Character Streams
【友情提醒】在上面提到的InputStream、OutputStream、Readers、Writers、DataInputStream等类都是JAVA中jdk自带的类。
问题三:JAVA中输入输出流相关类有哪些?
三:The Java IO API
java.io包中包含很多类,你的程序可以用来读取和写入数据。大多数类实现了顺序访问流(sequential access stream)。顺序访问流可以分两类:一类是读写字节(bytes),一类是读写Unicode字符(characters)。
java.io包局部图:
上面文章提到了流分字节流和字符流,而这张局部图恰好只显示了部分流的分支,哪个流的分支呢?
请看《JAVA深入浅出流之二字节流》
参考资料:
http://www.cnblogs.com/flyoung2008/p/3251826.html
http://weixiaolu.iteye.com/blog/1479656
http://blog.csdn.net/haoel/article/details/2224055
http://www.seas.upenn.edu/~cis1xx/resources/java/fileIO/introToFileIO.html
http://pirate.shu.edu/~wachsmut/Teaching/CSAS2214/Virtual/Lectures/lecture16.html
http://math.hws.edu/eck/cs124/javanotes6/c11/s1.html
http://bioinfo2.ugr.es/OReillyReferenceLibrary/java/exp/ch08_01.htm
http://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html
相关推荐
【标题】"Java深入浅出哥哥复合管"可能是指一个关于Java编程的教程或课程,其中"哥哥复合管"可能是作者或讲师的别称,或者是某种特定编程概念的比喻。这个标题暗示了内容将深入讲解Java语言,并可能涵盖一些高级或...
《深入浅出Java语言程序设计》是一本专为Java初学者和进阶者精心编写的教程,旨在帮助读者全面理解并掌握Java编程的核心概念和技术。本书涵盖了从基础语法到高级特性的广泛内容,旨在使读者能够熟练运用Java进行软件...
总的来说,《深入浅出Java语言程序设计》是一本全面覆盖Java基础知识和进阶技术的教材,无论你是初学者还是希望提升Java技能的开发者,都能从中受益。通过阅读和实践书中的内容,你将能够熟练掌握Java编程,为自己的...
《深入浅出JAVA》这本书是为那些希望深入了解Java编程语言的初学者和有一定经验的开发者量身打造的。书中的内容全面且深入,旨在帮助读者巩固基础,理解Java的核心概念,提升编程技能。 首先,书中的第一章通常会...
"Java深入浅出的学习"这个主题旨在为初学者提供全面且深入的Java学习资源。以下是一些关键的知识点,涵盖了Java的基础到进阶部分: 1. **Java基础**:Java的基础包括了解语法、数据类型(如基本类型和引用类型)、...
本文将深入浅出地介绍Java IO的基础概念,并通过实例帮助读者更好地理解这些概念。 #### Java IO基本概念 Java中的IO操作主要是基于流的概念进行的,流可以分为输入流(InputStream)和输出流(OutputStream)。...
马士兵老师的这门课程深入浅出地讲解了Java IO流的相关概念和技术,旨在帮助学员掌握数据输入、输出的各种方式。 首先,我们要了解Java IO流的基本概念。在Java中,IO(Input/Output)流是一组用于处理输入和输出...
《Java2深入浅出》是一本旨在帮助读者全面掌握Java编程技术的教材,结合源码进行讲解,适合从初学者到有一定经验的开发者阅读。这本书分为入门、进阶和应用实例三个部分,由人民邮电出版社出版,为学习Java语言提供...
本资料“关于java深入浅出设计模式”旨在帮助读者全面理解和掌握Java中的设计模式。 一、单例模式(Singleton) 单例模式确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过私有构造器和静态工厂...
这份"Java基础知识精讲"的资料深入浅出地介绍了Java的核心概念,是初学者理想的入门指南。以下将详细介绍其中可能涵盖的知识点。 1. **Java简介**:讲解Java的发展历史,其跨平台的特性(Write Once, Run Anywhere...
"深入浅出讲解java"的课件无疑是为那些希望学习或巩固Java基础的初学者量身定制的。以下是对Java的一些核心知识点的详细阐述: 1. **Java简介**:Java是由Sun Microsystems(现为Oracle Corporation)于1995年推出...
《深入浅出Java2面向对象程序设计》是一本旨在帮助读者深入理解Java编程语言和面向对象编程概念的书籍。随书附带的光盘包含了源代码、习题解答以及实验工具,为学习者提供了丰富的实践资源,使得理论与实践相结合,...
本资料“JavaIO字节输出流的总结共6页.pdf.zip”深入浅出地讲解了Java字节输出流的核心内容,对于初学者和有经验的开发者来说都是极好的学习参考资料。通过阅读和实践,你可以更全面地理解Java IO系统,提升在数据...
总之,Doug Lea的演讲深入浅出地介绍了如何在Java中实现高效的可扩展网络服务。通过采用事件驱动的处理方式和反应器模式,结合Java NIO提供的非阻塞IO功能,开发者可以在处理大量并发请求的同时,保持服务的高性能和...
《深入浅出NIO》 在Java编程领域,NIO(New Input/Output)是一种用于替代标准IO模型的机制,其核心在于非阻塞的I/O操作和通道(Channel)及缓冲区(Buffer)的使用。传统的IO模型,如描述中的“阻塞I/O”,在读写...
《深入浅出MappedByteBuffer》这篇文章主要探讨了Java NIO中MappedByteBuffer这一高效处理大文件的机制,以及与其相关的计算机内存管理概念。首先,我们来详细理解一下这些知识点。 内存管理是计算机系统的重要组成...
《深入浅出Java语言程序设计》是一本专为学习和理解Java编程语言而设计的教材。这本书涵盖了从基础到高级的Java编程概念,旨在帮助读者深入理解Java的各个方面,从而能够熟练地进行软件开发。 首先,Java语言是面向...