前言

创建好的输入/输出系统不仅要考虑三种不同种类的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. CI框架 -- 网页缓存

    CodeIgniter 可以让你通过缓存页面来达到更好的性能. 尽管 CodeIgniter 已经相当高效了,但是网页中的动态内容.主机的内存 CPU 和数据库读取速度等因素直接影响了网页的加载速度. ...

  2. 【阿里云】WindowsServer2012 搭建FTP站点 图文记录

    配置说明: 服务商:阿里云 系统: WindowsServer2012 一:配置FTP服务器 1.进入操作系统,直接从启动栏打开服务器管理器,选择添加功能和角色 2.选择服务器 3.勾选FTP服务器选 ...

  3. Java泛型概述

    泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除. 泛型基础 泛型类 我们首先定义 ...

  4. What really happens when you navigate to a URL

    As a software developer, you certainly have a high-level picture of how web apps work and what kinds ...

  5. 安卓开发笔记——TabHost组件(二)(实现底部菜单导航)

    上面文章<安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航)>中提到了利用自定义View(ImageView+TextView)来设置一个底部菜单的样式 这边再补充一种更为灵 ...

  6. 我的Oracle控制台创建数据库的工具

    Oracle windows 11.2.0.4 在控制台cmd下的创建工具,不依赖于服务和监听 工具及下载:Oracle控制台工具 注意:其中的 “seeddatabase.gbk.7z”文件为从Or ...

  7. MLE、MAP、贝叶斯三种估计框架

    三个不同的估计框架. MLE最大似然估计:根据训练数据,选取最优模型,预测.观测值D,training data:先验为P(θ). MAP最大后验估计:后验概率. Bayesian贝叶斯估计:综合模型 ...

  8. mysql 用户权限操作

    https://www.cnblogs.com/SQL888/p/5748824.html http://blog.csdn.net/fafa211/article/details/2249217

  9. gcc和g++头文件和库路径的寻找和添加

    对所有用户有效修改/etc/profile文件 对个人有效则修改~/.bashrc文件 #在PATH中找到可执行文件程序的路径. export PATH =$PATH:$HOME/bin (可一次指定 ...

  10. 8 -- 深入使用Spring -- 3...4 在ApplicationContext中使用资源

    8.3.4 在ApplicationContext中使用资源 不管以怎样的方式创建ApplicationContext实例,都需要为ApplicationContext指定配置文件,Spring允许使 ...