【Java流输入/输出原理】

在Jaav程序。对于输入数据/输出操作"流"(stream)时尚;J2SDK它提供了多种





各种各样的"流"类,用于获得不同类型的数据;程序通过标准方法输入或输出数据。

【输入/输出流的分类】

java.io包中定义了多个刘类型(累活抽象类)来实现输入/输出功能;能够从不同的角度





对其进行分类:

 按数据流的方向不同能够分为输入流和输出流。

 案处理数据单位不同能够分为字节流和字符流。

 依照功能不同能够分为节点刘和处理流。

J2SDK所提供的全部流类型位于包java.io内都分别继承自下面四种抽象流类型。

|------------------------------------|
| | 字节流 | 字符流 |
|--------|---------------|-----------|
| 输入流 | InputStream | Reader |
|--------|---------------|-----------|
| 输出流 | OutputStream | Writer |
|------------------------------------|

【节点流和处理流】

节点流为能够从一个特定的数据源(节点)读写数据(如:文件。内存)。

处理流是"链接"在已存在的流(节点流和处理流)智商,通过对数据的处理为程序提供更





为强大的读写功能。

【InputStream的基本方法】

//读取一个字节并以证书的形式返回(0~255),

//假设返回-1已到输入流的末尾

int read() throws IOException





//读取一系列字节并存储到一个数组buffer,

//反hi十几度去的字节数。假设读取前已到输入流的末尾返回-1

int read(byte[] buffer) throws IOException





//读取length个字节

//并存储到一个字节数组buffer,从length位置開始

//返回十几度去的字节数,假设读取前已到输入流的末尾返回-1

int read(byte[] buffer,int offset,int length) throws IOException





//关闭流释放内存资源

void close() throws IOException





//跳过n个字节不读。返回时机跳过的字节数

long skip(long n) throws IOException





【OutputStream的基本方法】

//向输出流中写入一个字节数据,该字节数据为參数b的低8位

void write(int b) throws IOException





//将一个字节类型的数组中的数据写入输出流

void write(byte[] b) throws IOException





//讲一个字节类型的数组中的从指定位置(off)開始的

//len个字节写入到输出流

void write(byte[] b,int off,int len) throws IOException





//关闭释放内存资源

void close() throws IOException





//将输出流中缓冲的数据所有写出到目的地

void flush() throws IOException

【Reader的基本方法】

//读取一个字符并一整数的形式返回(0~255)

//假设返回-1已到输入流的末尾

int read() throws IOException





//读取length个字符

//并存储到一个数组buffer,从length位置開始

//返回十几度去的字符数,假设读取前已到输入流的末尾返回-1

int read(char[] cbuf,int offset,int length) throws IOException





//关闭流释放内存资源

void close() throws IOException





//跳过n个字符不读,返回时机条股的字节数

long skip(long n) throws IOException

【Writer的基本方法】

//想输出流中写入一个字符数据,该字符数据为參数b的低16位

void write(int c) throws IOException





//将一个字符类型的数组中的数据写入输出流

void write(char[] cbuf) throws IOException





//将一个字符类型的数组总的从指定位置(offset)開始的

//length个字符写入到输出流

void write(char[] cbuf,int offset,int length) throws IOException





//关闭释放内存资源

void close() throws IOException





//将输出流中缓冲的数据所有写出到目的地

void flush() throws IOException

【訪问文件】

FileInputStream 和 FileOutputStream 分别继承自 InputStream 和 OutputStream用





于向文件里输入和输出字节。

FileInputStream和FileOutputStream的经常使用构造方法:

 FileInputStream(String name) throws FileNotFoundException

 FileInputStream(File file) throws FileNotFoundException

 FileOutputStream(String name) throws FileNotFoundException

 FileOutputStream(File file) throws FileNotFoundException

 FileOutputStream(File file,boolean append) throws FileNotFoundException

FileInputStream 和 FileOutputStream 类支持其父类InputStream 和 OutputStream 





所提供的数据读写方法。

注意:

 在实例化FileInputStream和FileOutputStream流时要用try-catch语句已处理其可能抛





出的FileNotFoundException。

 在读写数据时也要用try-catch语句以处理可能抛出的IOException。

 FileNotFoundException是IOException的子类。

【缓冲流】

缓冲流要“套接”在对应的节点刘之上。对读写的数据提供了缓冲的功能,提高了读写





的效率。同一时候添加了一些新的方法。

J2SDK提供了四种缓冲流,其经常使用的构造方法为:

BufferedReader(Reader in)

BufferedReader(Reader in,int sz) //sz为自己定义缓冲区的大小

BufferedWriterWriter(Writer out)

BufferedWriter(Writer out,int sz)

BufferedInputStream(InputStream in)

BufferedInputStream(InputStream in,int size)

BufferedOutputStream(OutputStream out)

BufferedOutputStream(OutputStream out,int size)

缓冲区输入流支持其父类的mark和reset方法。

BufferReader提供了readLine方法用于读取一行字符串(以\r或\n分隔)。

BufferedWriter提供了newLine用于写入一个行分隔符。

对于输出的缓冲流,写出的数据会如今内存中缓存,使用flush方法将会使内存中的数据





立马写出。

【转换流】

InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换。

InputStreamReader须要和InputStream“套接”。

OutputStreamWriter须要和OutputStream“套接”。

转换流在构造时能够指定其编码集合,比如:

InputStream isr = new InputStreamReader(System.in , "ISO8859_1")

【数据流】

DataInputStream 和 DataOutputStream 分别继承自InputStream 和 OutputStream,它





属于处理流。须要分别“套接”在InputStream和OutputStream类型的节点流上。

DataInputStream 和 DataOutputStream提供了能够存取与机器无关的Java原始类型数据





(如:int,double等)的方法。

DataInputStream和DataOutputStream的构造方法为:

  DataInputStream(InputStream in)

  DataOutputStream(OutputStrewam out)

【Print流】

PrintWriter和PrintStream都属于输出流,分别针对于字符和字节。

PritnWriter和PritnStream提供了重载的print

Println方法用于多种数据的输出。

PrintWriter和PrintStream的输出操作不会抛出异常。用户通过检測错误状态获取错误





信息。

PrintWriter和PrintStream有自己主动flush功能。

 PrintWriter(Writer out)

 PrintWriter(Writer out,boolean autoFlush)

 PrintWriter(OutputStream out)

 PrintWriter(OutputStream out,boolean autoFlush)

 PrintStream(OutputStream out)

 PrintStream(OutputStream out,boolean autoFlush)

【Object流】

直Object写或读出

 transientkeyword

 serializable接口

 externalizable接口

Java容器的概要的更多相关文章

  1. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  2. 【Java心得总结六】Java容器中——Collection

    在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...

  3. 【Java心得总结五】Java容器上——容器初探

    在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...

  4. Java 容器(list, set, map)

    java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...

  5. Java - 容器详解

    一.ArrayList 长度可变数组,类似于c++ STL中的vector. 元素以线性方式连续存储,内部允许存放重复元素. 允许对元素进行随机的快速访问,但是向ArrayList中插入和删除元素的速 ...

  6. Java 容器:Collection 初探之 List

    1 ///: JavaBasic//com.cnblogs.pattywgm.day1//CollectionTest.java 2 3 package com.cnblogs.pattywgm.da ...

  7. java容器---集合总结

    思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...

  8. 3)Java容器

    3)Java容器   Java的集合框架核心主要有三种:List.Set和Map.这里的 Collection.List.Set和Map都是接口(Interface). List lst = new ...

  9. JAVA容器

    JAVA容器 一.容器体系结构 java.util 二.迭代器Iterator<E> 迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发人员并不需要了解该序列的底层结构.迭代器通常被 ...

随机推荐

  1. HDU 4981 Goffi and Median(水)

    HDU 4981 Goffi and Median 思路:排序就能够得到中间数.然后总和和中间数*n比較一下就可以 代码: #include <cstdio> #include <c ...

  2. 使用简单的 5 个步骤设置 Web 服务器集群

    通过在多个处理器之间分担工作负载并采用多种软件恢复技术,能够提供高度可用的环境并提高环境的总体 RAS(可靠性.可用性和可服务性).可以得到的好处包括:更快地从意外中断中恢复运行,以及将意外中断对终端 ...

  3. CURD特性

    本节课大纲: 一.ThinkPHP 3 的CURD介绍 (了解) 二.ThinkPHP 3 读取数据 (重点) 对数据的读取 Read $m=new Model('User'); ##返回一个实例 $ ...

  4. hdu2647解题报告

    题意:有个工厂的老板给工人发奖金,每人基础都是888,工人们有自己的想法,如:a 工人想要比 b 工人的奖金高,老板想要使花的钱最少 那么就可以 给b 888,给a 889 ,但是如果在此基础上,b也 ...

  5. Java经典23种设计模式之创造型模式(一)

    设计模式被称为程序猿的内功,之前零零散散的看过一大部分,但自己么有总结过.故此次在这里总结下.值得一提的是,设计模式并不是Java所特有.由于一直搞Android.这里就用Java为载体.最经典的设计 ...

  6. Webbrowser控件execcommand参数详解

    2D-Position 允许通过拖曳移动绝对定位的对象.AbsolutePosition 设定元素的 position 属性为“absolute”(绝对).BackColor 设置或获取当前选中区的背 ...

  7. Uva - 11419 - SAM I AM

    题意:一个矩形——R*C的网格,在某些位置上有石头,在网格外开一炮可以打掉该行或者该列的石头,求打掉这些石头最少需要多少门大炮,位置分别设在哪行哪列(0<R<1001, 0 < C ...

  8. PHP开发学习门户改版效果图投票

    亲们,PHP开发学习门户上线两个月啦,站长想进行一次改版.希望大家在留下宝贵的一票.选出喜欢的样式吧 A样式: B样式: mod=misc&action=votepoll&fid=46 ...

  9. 【VxWorks系列】任务间同步与通信之信号量

    信号量是VxWorks提供的最常用,最快速的一种任务间通信机制.VxWorks中信号量有三种:二值信号量,互斥信号量,计数信号量.下面一一介绍这三种信号量的作用与区别. 信号量通常的作用就是是控制任务 ...

  10. Wix学习整理(5)——安装时填写注册表

    原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...