前言

创建好的输入/输出系统不仅要考虑三种不同种类的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系统的更多相关文章

  1. Java基础系列8——IO流超详细总结

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...

  2. Java基础系列 - JAVA集合ArrayList,Vector,HashMap,HashTable等使用

    package com.test4; import java.util.*; /** * JAVA集合ArrayList,Vector,HashMap,HashTable等使用 */ public c ...

  3. Java基础系列-equals方法和hashCode方法

    原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. publi ...

  4. 夯实Java基础系列5:Java文件和Java包结构

    目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...

  5. 夯实Java基础系列10:深入理解Java中的异常体系

    目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...

  6. 夯实Java基础系列11:深入理解Java中的回调机制

    目录 模块间的调用 多线程中的"回调" Java回调机制实战 实例一 : 同步调用 实例二:由浅入深 实例三:Tom做题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 ...

  7. Java基础系列2:深入理解String类

    Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...

  8. Java基础系列-ArrayList

    原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...

  9. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

  10. Java基础系列--HashMap(JDK1.8)

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10022092.html Java基础系列-HashMap 1.8 概述 HashMap是 ...

随机推荐

  1. 联想服务器X3650 M2 配置 RAID5 + 热备盘

    实验环境: 1.  服务器型号联想 System X3650 M2 2.  六块300G  SAS硬盘 实验目的: 配置RAID 5 ,搭建重要文件备份服务器. 标注:本教程六块硬盘,其中五块硬盘做R ...

  2. C# 校验给定的ip地址是否合法

    函数用于检测ip地址格式是否合法,包括ip的组成格式,每隔段是否不超过255等,但这个函数不能验证这个ip地址是否可以ping通. /// <summary> /// 验证IP地址是否合法 ...

  3. 9款极具创意的HTML5/CSS3进度条动画

    今天我们要分享9款极具创意的HTML5/CSS3进度条动画,这些进度条也许可以帮你增强用户交互和提高用户体验,喜欢的朋友就收藏了吧. 1.HTML5/CSS3图片加载进度条 可切换多主题 今天要分享的 ...

  4. PHP替换回车换行的三种方法

    一个小小的换行,其实在不同的平台有着不同的实现,为什么要这样,世界是多样的! 本来在Unix世界换行用/n来代替换行, Windows为了体现不同,就用/r/n, 更有意思的是,Mac中又用了/r. ...

  5. 写一个方法,用一个for循环打印九九乘法表

    public class MultiplicationTable { /**  * @description 写一个方法,用一个for循环打印九九乘法表   * @author  wangkun  * ...

  6. java rpc

    一.简介 Hessian和Burlap是由Caucho Technology提供的基于HTTP协议的轻量级远程服务解决方案.他们都致力于借助尽可能简单那的API和通信协议来简化Web服务.    He ...

  7. 小程序中监听textarea或者input输入的值动态改变data中数组的对象的值

    Page({ data: { todoLists:[ { detail:"", date:"", location:"", priority ...

  8. Vue-router路由判断页面未登录跳转到登录页面

    router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requireAuth) ...

  9. 最简单安装laravel

    http://laravelacademy.org/resources-download

  10. Grunt--Less

    摘要: 之前介绍了自动构建工具Grunt,其中有一个模块是"grunt-contrib-less",下面是配置Grunt自动编译less文件. 安装: Grunt是基于node,功 ...