【Java基础系列】Java IO系统
前言
创建好的输入/输出系统不仅要考虑三种不同种类的IO系统(文件,控制台,网络连接)还需要通过大量不同的方式与他们通信(顺序,随机访问,二进制,字符,按行,按字等等)。
一、输入和输出
Java的IO类分割为输入和输出两个部分,从InputStream(输入流)衍生的所有类都拥有名为read()的基本方法,用于读取单个字节或者字节数组。同样,从OutputStream衍生的所有类都拥有基本方法write(),用于写入单个字节或者字节数组。但是通常我们不会用到这些方法,他们之所以存在是因为更复杂的类可以利用他们,以便提供一个更有用的接口。因此,我们很少用单个类创建自己的系统对象。一般情况下我们都将多个对象重叠在一起,提供自己期望的功能,我们之所以感到Java的流库非常复杂,就是因为为了创建单独一个结果流,却需要创建多个对象的缘故。
1、InputStream类型
InputStream的作用是标志哪些从不同起源地产生输入的类,这些起源地包括
- 字节数组
- String对象
- 文件
- 管道
- 一系列其他流,以便我们将其统一收集到单独一个流内
- 其他起源地:如internet连接等
- FilterInputStream
1)ByteArrayInputStream允许内存中的一个缓冲区作为InputStream使用,从中提取字节的缓冲区/作为一个数据源使用。通过将其同一个FilterInputStream对象连接,可提供一个有用的接口。
2)StringBufferInputStream将一个String转换成InputStream一个String(字串)。基础的实施方案实际采用一个StringBuffer(字串缓冲)、作为一个数据源使用。通过将其同一个FilterInputStream对象连接可提供一个有用的接口。
3)FileInputStream用于从文件读取信息,代表文件名中的一个String,或者一个File或FileDescription对象/作为一个数据源使用。通过将其通同一个FileInputStream对象连接,可提供一个有用的接口
4)PipedInputStream产生为相关的PipedOutputStream写的数据,实现了管道化的概念
5)PipedOutputStream作为一个数据源使用,通过将其通一个FilterInputStream对象连接,可提供一个有用的接口。
6)SequenceInputStream将两个或更多的InputStream对象转换成单个InputStream使用,两个InputStream对象或者一个Enumeration,对于InpuStream对象的一个容器,作为一个数据源使用。通过将其同一个FilterInputStream对象连接,可提供有用的接口,
2、OutputStream的类型
这种类别决定了我们的输入往何处去:一个字节数组;一个文件;一个管道。
1)ByteArrayOutputStream 在内存中创建一个缓冲区。我们发送给流的所有数据都会置入这个缓冲区。构造参数:可选缓冲区的初始大小。用于指出数据的目的地,若将其通FilterOutputStream对象连接到一起,可提供一个有用的接口。
2)FileOutputStream:将信息发给一个文件,构造参数:用一个String代表文件名,或选用一个File或FileDescriptor对象, 用于指出数据的目的地,若将其通FilterOutputSTream对象连接到一起,可提供一个有用的接口。
3)PipedOutputStream,我们写给它的任何信息都会自动成为相关的PipedInputStream的输出。实现管道化的概念,构造参数:PipedInputStream.为多线程处理指出自己数据的目的地。
4)FilterOutputStream:对作为破坏器接口使用的类进行抽象处理。
【Java基础系列】Java IO系统的更多相关文章
- Java基础系列8——IO流超详细总结
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...
- Java基础系列 - JAVA集合ArrayList,Vector,HashMap,HashTable等使用
package com.test4; import java.util.*; /** * JAVA集合ArrayList,Vector,HashMap,HashTable等使用 */ public c ...
- Java基础系列-equals方法和hashCode方法
原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述 equals方法和hashCode方法都是有Object类定义的. publi ...
- 夯实Java基础系列5:Java文件和Java包结构
目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...
- 夯实Java基础系列10:深入理解Java中的异常体系
目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...
- 夯实Java基础系列11:深入理解Java中的回调机制
目录 模块间的调用 多线程中的"回调" Java回调机制实战 实例一 : 同步调用 实例二:由浅入深 实例三:Tom做题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 ...
- Java基础系列2:深入理解String类
Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...
- Java基础系列-ArrayList
原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...
- Java基础系列-Comparable和Comparator
原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述 Java中的排序是由Comparable和Comparator这两个接 ...
- Java基础系列--HashMap(JDK1.8)
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10022092.html Java基础系列-HashMap 1.8 概述 HashMap是 ...
随机推荐
- (转)android媒体--stagefright概述【一】
转自:http://blog.csdn.net/loovejava/article/details/8971790 最近杂七杂八的忙碌着,前几天看了下这部分主要是stagefright模块的,所以更改 ...
- (转)【多媒体封装格式详解】--- AAC ADTS格式分析
出自:http://blog.csdn.net/tx3344/article/details/7414543 http://www.it6655.com/2012/08/aac-adts-html ...
- Android多国语言的value文件夹命名方式
在res目錄下建立不同名稱的values文件來調用不同的語言包Values文件匯總如下:中文(中國):values-zh-rCN中文(台灣):values-zh-rTW中文(香港):values-zh ...
- Intellij Idea反向生成Hibernate实体类
每次根据数据库的表反向生成实体类老不记得步骤...脑子不够用,这里特意记录一下.碰到的问题也及时更新到这里来. 1. 工程添加Hibernate支持 两种方式: 第一种:工程上右键选择 "A ...
- myeclipse中项目上传到cvs注意事项
上传工程时检查cvsignore文件,如果有该文件直接删掉再上传.这样才能保证下载下来的文件保持原上传的目录结构.
- Thinkphp5笔记九:路由设置,隐藏indx.php
网站根目录下.htaccess <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on ...
- perforce使用技巧
如果用其他编辑器打开一个在perforce上的文件, 只需要在notepad++ (或者其他)上右键选择 然后到perforce的workspace里Ctrl + V 即可定位到该文件. 再使用Ctr ...
- flashfxp v3.7 注册码
-------- FlashFXP Registration Data START --------FLASHFXPvwBW1S4QvwAAAAC5W5MNJwXnsl73i3CxcVAAvAyagF ...
- What's new in JDK 8
(1)http://docs.oracle.com/javase/8/docs/technotes/guides/language/enhancements.html#javase8 (2)https ...
- matplotlib使用GridSpec调整子图位置大小 (非对称的子图)
用matplotlib.pyplot的subplots命令可以很方便的画对称的子图,但是如果要画非对称的子图(如下)就需要用GridSpec命令来控制子图的位置和大小: 而上图的结构可以用一下两种方式 ...