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

Java I/O系统基础知识

    博客分类:
  • java
阅读更多

编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或时有能力接收数据的接收端对象。“流”概念源于UNIX中的管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等,它屏蔽了实际的I/O设备中处理数据的细节。   一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。 流的方向是重要的,根据流的方向,流可以分为两类:输入流和输出流。其实输入/输出是想对于内存来说的。 实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对于输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。

  1. a.流:一组有序的数据序列。
  2. b字节流:数据流中最小的数据单元是字节。
  3. c.字符流:数据流中最小的数据单元是字符。

 一.  java.io包中的类对应两类流

一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流,其他的流则称为过滤流(包装流)

过滤流:一些流可以从文件以及其他地方接收字节,另一些流可以将字节组合成更有用的数据类型。将一个已经存在的流传递给另一个流的构造方法,将这两种流结合起来,结合后的流被称为过滤流。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流也类似。我们很少用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能(即装饰器设计模式)。

java的常用输入、输出流其实都是继承自4个抽象类,分别是:

  • 基于单字节的InputStream,OutputStream类(面向字节形式的I/O)
  • 基于双字节的Unicode代码单元的 Reader, Writer类(面向字符形式的I/O)

一旦打开输入流后,程序就可从输入流串行地读数据。从输入流读/写数据的过程一般如下:打开一个流通道-->读取/写信息-->关闭流通道。

在java平台中,有以下两种方式能获得本地平台的字符编码类型:

(a)System.getProperty("file.encoding");

(b) Charset cs=Charset.defaultCharset();

所有的输入流、输出流都可以分为字节(输入、输出)流,字符(输入、输出)流,处理字节的主要是(OutputStream/InputStream) 系列,处理字符的,主要是(Reader/Write)系列

二.以字节(Byte)为导向的输入流(InputStream系列),这几个类都可以与FileInputStream对象相连以提供有用接口:

  1. ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
  2. StringBufferInputStream(在java1.1中已经弃用了):把一个String对象作为InputStream,底层实现使用StringBuffer
  3. FileInputStream:把一个文件作为InputStream,实现对文件的读取操作(文件名、文件、FileDescriptor对象)
  4. PipedInputStream:实现了pipe的概念,主要在线程中使用(作为多进程中的数据源)
  5. SequenceInputStream:把多个InputStream合并为一个InputStream

以字节(Byte)为导向的输出流(OutputStream系列),可以与FilterOutputStream对象相连以提供有用接口:

  1. ByteArrayOutputStream:在内存中创建缓冲区,把信息存入内存中的一个缓冲区中,缓冲区初始化尺寸(可选)
  2.  FileOutputStream:把信息存入文件中(文件名、文件、FileDescriptor)
  3. PipedOutputStream:实现了pipe的概念,主要在线程中使用(指定用于多线程的数据的目的地)

.与之对应的(Reader/Writer)系列:

  1. Reader:                 与InputStream相对应,适配器InputStreamReader
  2. Writer:                 与OutputStream相对应,适配器为OutputStreamWriter
  3. FileReader:              与FileOutputStream相对应
  4.  FileWriter:             与FileOurputStream相对应
  5.  StringReader:           无相对应的类
  6. StringWriter:           与ByteArrayInputStream相对应
  7. CharArrayReader:        与ByteArrayOutputStream相对应
  8.  CharArrayWriter:        与ByteArrayOutputStream相对应
  9.  PipedReader:            与PipedInputStream相对应
  10.  PipedWriter:            与PipedOutputStream相对应

四.两种不限导向的stream之间的转换(使用适配器类)

InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集

五.通过FilterInputStream从InputStream读取数据:

  1. DataInputStream:从stream中读取基本类型(int、char,long等)数据。
  2. BufferedInputStream:使用缓冲区 ,使用它可以防止每次读取都得进行实际的读操作
  3. LineNumberInputStream:会记录input stream内的行数,然后可调用getLineNumber()和setLineNumber(int)
  4. PushbackInputStream:很少用到,一般用于编译器开发

通过FilterOutputStream向OutputStream写入:

  1. DataIOutputStream:可以按照移植方式往stream中输出基本类型(int、char,long等)数据。
  2.  BufferedOutputStream:使用缓冲区 ,使用它可避免每次发送数据都进行实际的写操作
  3.  PrintStream:产生格式化输出 ,其中DataOutputStream处理数据的存储,PrintStream处理显示

六.更改流的行为

尽管BufferedOutputStream是FilterOutputStream的子类,但是BufferedWriter并不是FilterWriter的子类,(FilterWriter是抽象类,没有任何子类)

  1. 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream
  2. BufferedReader:与BufferedInputStream对应
  3.  LineNumberReader:与LineNumberInputStream对应
  4. PushBackReader:与PushbackInputStream对应
  5. BufferedWrite:与BufferedOutStream对应
  6. PrintWrite:与 PrintStream对应

七.自我独立的类:RandomAccessFile

这个类适用于有大小已知的记录组成的文件,RandomAccessFile除了实现了DataInput和DataOutput接口(DataInputStream和DataOutputStream也实现了这两个接口)之外,这个类是个完全独立的类,它拥有和别的I/O类型本质不同的行为,可以在一个文件内向前和向后移动,直接从Object派生而来。

  1. 可通过RandomAccessFile对象完成对文件的读写操作
  2. 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
  3. 可以直接跳到文件中指定的位置

RandomAccessFile的大部分功能(不是全部)有nio存储映射文件所取代

2
4
分享到:
评论

相关推荐

    java基础知识I/O流使用详解

    编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或时有能力接收数据的接收端对象,本文为大家介绍Java中I/O系统基础知识

    java程序设计

    《Java程序设计》系统地介绍了Java程序语言的知识,全书分为13章,包括Java集成开发环境,语法基础,对象和类的基本概念,数组,JavaI/O体系,Java多线程机制,图形用户界面、容器等。在介绍基础知识的同时,《Java...

    Java技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计.zip

    算法: 剑指 Offer 题解 ...Java I/O 系统设计: 系统设计基础 分布式 集群 攻击技术 缓存 消息队列 面向对象: 面向对象思想 设计模式 工具: Git Docker 构建工具 正则表达式 编码实践: 代码可读性 代码风格规范

    Java2核心技术卷I+卷2:基础知识(第8版) 代码

    New I/O 65 Regular Expressions 75 Chapter 2: XML 87 Introducing XML 88 Parsing an XML Document 93 Validating XML Documents 105 Locating Information with XPath 129 Using Namespaces 136 ...

    Java基础知识篇.pdf

    2020年Java基础知识篇,java基础会考察的一些问题,语法、面向对象,集合,异常,多线程,I\O流等等

    基于 Java Swing + 人脸识别编写的学校考试系统源代码Java基础大作业

    几乎涵盖了 Java 基础面向对象,封装继承多态,I/O 流,多线程,网络,数据库的所有知识 项目用到的主要技术 利用阿里云的短信API服务提供登录注册时的短信发送 利用 Java Mail 实现发送邮件 用户密码采用 MD5 加盐...

    JAVA学习手册CHM版

    第2篇为核心篇,包括字符串处理、集合类、使用异常处理机制、掌握Java的I/O技术、精通多线程技术、枚举与泛型;第3篇为高级篇,包括Swing基础知识、JDBC技术、Swing高级组件、GUI事件处理机制、网络程序设计;第4篇...

    Java语言程序设计(基础篇)文字版

    设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、二进制I/O和递归等 内容。进阶篇主要介绍数据结构、高级GUI设计、多线程、集合架构、网络和Web程序 设计、算法效率和排序、MVC,以及高级Java数据库...

    java基础知识

    java基础知识,涵盖了面向对象,I/O,反射,多线程等,众多java基础知识,适合java初学者夯实基础或者不明白如何学java的朋友

    Java语言程序设计-基础篇(原书第8版)

    基础篇从java语言的特点入手,介绍了语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、applet和多媒体、二进制i/o、递归等内容。《Java语言程序设计:基础篇(原书第8版)》可作为...

    java入门学习视频--java入门学习视频

    java入门学习视频 java一些基础性的知识 数组集合 I/o流等等 java入门学习视频 java一些基础性的知识 数组集合 I/o流等等

    【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识.rar

    JavaGuide 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。 介绍 对于 Java 初学者来说: 本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系...Java 基础知识疑难点/

    Java语言程序设计-基础篇(原书第8版) 高清完整PDF版

    基础篇从java语言的特点入手,介绍了语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、applet和多媒体、二进制i/o、递归等内容。《Java语言程序设计:基础篇(原书第8版)》可作为...

    java之路,主要是java中的学习过程与基础项目.rar

    其实大部分语言的基础知识都是大同小异,如果之前已经学习过其他语言如C、C++,那学习这部分会更快。 这部分主要学习的内容有:基本程序结构,类与对象,接口,泛型,反射,集合,异常与调试, Java 网络编程, ...

    《Java语言程序设计——基础篇》第三章选择作业答案.zip

    中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、二进制I/O和递归等内容。进阶篇主要介绍数据结构...

    Java程序设计实验指导书.doc

    主要包括JDK和Jcreator的安装与初步使用,Java语言基础知识的运用,程序流程控制,数组,面向对象的编程,接口与包,Java图形用户界面设计与事件处理,Java I/O系统,异常处理,多线程程序设计等20多个实验的程序...

    涵盖了 Java 基础、集合、源码、并发、虚拟机、框架、数据库、网络编程、设计模式、新特性和数据结构等多个知识领域的面试突击

    Java基础知识:数据类型、关键字、面向对象、集合框架、异常处理等 Java核心技术:I/O、多线程、网络编程、反射、泛型等 Java虚拟机:内存模型、垃圾收集器、类加载机制等 Java企业级开发:Spring、Hibernate、MyBatis等...

    Java语言程序设计:基础篇(原书第8版)

    基础篇从java语言的特点入手,介绍了语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、applet和多媒体、二进制i/o、递归等内容。《Java语言程序设计:基础篇(原书第8版)》可作为...

    Java基础(韩顺平版)笔记详

    有经验的开发者,希望重温Java基础知识或参考韩顺平的教学风格。 使用场景及目标 初学者入门:为无编程背景的学员提供Java语言的基础知识。 课程学习:作为计算机科学课程的辅助教材,帮助学生深入理解Java。 技能...

    Java 2教程(第五版)

    本书主要介绍了核心语言...企业级Java技术部分讨论了JDBC API、EJB体系结构的基础知识、Java平台安全方案以及XML。 本书结构严谨、语言流畅,是一个学习Java 2最新技术的综合参考书,适合各种层次的Java编程人员使用。

Global site tag (gtag.js) - Google Analytics