`
周凡杨
  • 浏览: 230399 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA深入浅出流之一IO流

阅读更多

工作三年了,可自己对文件读写还是一知半解,写代码的时候都不知道从何下手(其实也可以说是从哪个类下手),什么时候用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. 

  1. Java classes can be categorised into two groups based on the data type one which they operate:
  2. Byte streams
  3. 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

     http://docs.oracle.com/javase/tutorial/essential/io/

  • 大小: 10.9 KB
  • 大小: 14.4 KB
  • 大小: 31.9 KB
  • 大小: 60 KB
  • 大小: 31.3 KB
7
0
分享到:
评论
2 楼 mjjs04 2014-01-15  
             
1 楼 tayer.guo 2014-01-14  

相关推荐

    java的各种io操作

    java提供各种IO操作。深入浅出的讲解IO.适合初学者学习

    JavaIO流精讲上

    内容经过精心雕琢,细致设计,能够做到讲解深入浅出、通俗易懂!可以真正让学员学有所获!课程内容主要有:File类概述、File类功能讲解、JAVA IO流概述、字节流、字符流、缓冲流、InputStream、OutputStream、Reader...

    JAVA私塾中级之 IO

    本资料是java私塾"深入浅出学java开发中级"系列精品课程的第四章课件,pdf格式

    高性能IO模型浅析

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非...深入浅出介绍这几种模型

    尚硅谷_宋红康_第13章_IO流.pdf

    ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千斤 2.课程内容推陈出新: ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse...

    尚硅谷_宋红康_第13章节练习_IO流.doc

    ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千斤 2.课程内容推陈出新: ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    ├─面试必问-微服务架构深入浅出讲解springcloud │ 微服务架构 --深入浅出讲解springcloud.mp4 │ ├─面试必问-教你手写MyBatis框架 │ 一小时教你手写MyBatis框架.mp4 │ ├─面试必问-架构杀手锏——java混乱...

    Java程序设计PPT

    主讲IO文件流,文件的输入输出。讲解深入浅出。

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    开篇词讲怎样才能做好性能调优02讲如何制定性能调优策略04讲慎重使用正则表达式05讲ArrayList还是LinkedList使用不当性能差千倍07讲深入浅出HashMap的设计与优化08讲网络通信优化之IO模型:如何解决高并发下IO瓶颈09...

    【Java面试+Java学习指南】一部分大部分Java招聘所需要掌握的核心知识

    深入浅出JVM JVM内存模型 性能调优、线上问题排查 类加载机制详解 垃圾回收机制 垃圾回收器、垃圾回收算法 ARM与多线程 多线程基础知识 常见关键字 多线程锁机制 线程池知识点 常见的JUC工具类 多线程经典面试题 ...

    深入浅出Java 重定向和请求转发的区别

    import java.io.*; import javax.servlet.http.*; import javax.servlet.*; import com.bjpowernode.exam.model.*; import com.bjpowernode.exam.manager.*; public class SearchS

    张孝祥Java就业培训教程.pdf

    在以后的章节中,用通俗易懂的手法,紧密联系实际应用的方式,深入浅出地讲解了多线程,常用Java类,Java中的I/O(输入输出)编程,GUI与Applet,网络编程等方面的知识。 本书许多内容都来源于程序员圈子里的非正式...

    动力节点Java基础301集_史上最全的Java基础教程

    2:讲集合时先从数组扩容讲起,过度到集合,确实不错,深入浅出比较容易理解。 3:String创建几个对象,这个可以说全网最牛,不过例子举的有点猥琐,总是讲小哥哥与小姐姐的故事。 4: 源码分析分析讲的特别到位,尤其...

    java版飞机大战源码-Rockira.github.io:Rockira.github.io

    :hot_beverage:深入浅出JVM JVM内存模型 性能调优、线上问题排查 类加载机制详解 垃圾回收机制 垃圾回收器、垃圾回收算法 :jack-o-lantern:拓展知识 :open_book:Java容器 :memo:多线程 线程状态转换与通信机制 线程...

    Hadoop实战中文版.PDF

    《Hadoop实战》分为3个部分,深入浅出地介绍了Hadoop框架、编写和运行Hadoop数据处理程序所需的实践技能及Hadoop之外更大的生态系统。 《Hadoop实战》适合需要处理大量离线数据的云计算程序员、架构师和项目经理阅读...

Global site tag (gtag.js) - Google Analytics