IO架构
来源:互联网 发布:电玩城斗牛软件 编辑:程序博客网 时间:2024/06/05 06:38
IO架构
一、IO框架概要
1、 Input/OutputStream及其子类
2、Reader/Writer及其子类
1、基本概念
FileInputStram和FileOutputStram用于读/写本地文件系统中的文件。
PipedInputStream和PipedOutputStream用来实现管逍的输入出。
ByteArrayInputkStream和ByteArrayOutputStream 用于读/写内存数据。
StringBufferInputStream 使程序可以从一个StringBuffer类的可变字符串中读取数据。
SequenceInputStream用来把多输入流连接到一个输出流。
FilterInputStream和 FilterOutputStream 分别重写了类InputStream和OutputStream中的所有方法,为过滤流提供了统一的接口,使得在读写数据的同时可以对数据进行处理。
DateInputStream和 DataOutPutstream可以用与机器无关的格式读/写 Java的基本数据类型。
BufferedInputStream和 BufferedOutputStream 在读/写的同时对数据进行缓存,从而减少对数据源的访问,提高运行效率。
ObjectInputStream和ObjectOutputStream 用来直接进行对象的读写。
LineNumberInputStream可以在读取数据的同时记录读取的行数。
PushbackInputStream 包括一个单字节的缓冲区,使得在读取数据时可以预取下一个字符。
PrintStream中提供了方便的输出方法。
字节流:
从InputStream和OutputStream派生出来的一系列类.这类流以字节byte为基本处理单位
FileInputStream FileOutputStream
PipedInputStream PipedOutputStream
ByteArrayInputStream ByteArrayOutputStream
FilterInputStream FilterOutputStream
DataInputStream DataOutputStream
BufferedInputStream BufferedOutputStream
字符流:
从Reader和Writer派生出来的一系列类,以16位的Unicode码表示的字符为基本处理单位
InputStreadmReader OutputStreadmWriter
FileReader FileWriter
CharArrayReader CharArrayWriter
PipedReader PipedWriter
FilterReader FilterWriter
BufferedReader BufferedWriter
StringReader StringWriter
2、分类
按功能分类:
输入流:面向程序,向程序中写入数据的流
输出流:面向程序,从程序中读出数据写到文件中的流
按数据的底层操作分类:
字节流:可以处理所有类型的数据,如二进制流和字符流等.
字符流:只能处理和文本相关的数据.
按照处理的对象分类:
节点流:处理所有硬件设备,数据的源头,它属于低级方式.
处理流:处理节点流,它属于高级方式,有更强的功能.
inputStream:所有字节输入流的父类.
outputStream:所有字节输出流的父类.
Reader:所有字符输入流的父类.
Writer:所有字符输出流的父类.
3、五对基本流
(1.文件流(字节流/节点流):底层的流,用于实现程序和文件之间的互相访问.
FileInputStream 在读入不存在的文件时会抛出异常.
FileOutputStrea 在执行构造时就会把目的文件的内容清空,除非使用追加方式.
(2.数据流:能够处理基本类型的数据也支持字符的处理流,用于访问各种基本类型的数据
DataInputStream
DataOutputStream
(3.对象流:
ObjectInputStream
ObjectOutputStream
(4.逐行流:(实现对数据的逐行读写的处理流)
BufferedReader
BufferedWriter
(5.转换流/桥梁流:实现字节到字符的转换,中间流,存在于底层流和处理流之间
InputStreamReader
OutputStreamWriter
逐行读入文本的方法:程序<--ReadLine<--BufferedReader<--InputStreamReader<--FileInputStream<--文件.
管道流:和线程进行交互的一组数据流
PipedInputStream
PipedOutputStream
4、常用函数:
read() 从流中读入数据
skip() 跳过流中若干字节数
available() 返回流中可用字节数
mark() 在流中标记一个位置
reset() 返回标记过得位置
markSupport() 是否支持标记和复位操作
close()
write() 输出到流
flush() 刷空输出流
二、标准数据流
指在字符方式下,程序与系统进行交互的方式.标准输入studin,对象是键盘.标准输出stdout,对象是屏幕.标准错误输出stderr,对象是屏幕.
示例:
InputStream is = System.in;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String data = br.readLine(); // 键盘读入行
while(!data.equals("abcd"))
{
System.out.println("读取:"+data); // dos输出
data = br.readLine();
}
三、Input/OutputStream(顺序访问流)
流一般分为输入流Input Stream和输出流Output Stream。
抽象类InputStream和OutputStream是所有流的基类 ,它们分别提供了输入和输出处理的基本接口,并且都分地实现了其中的某些方法。由于InputStream和OutputStream都是抽象类 ,所以不能直接生成它们的对象。
1、InputStream所提供的方法主要有:
(1)从流中读取数据
int read();
从输入流中读取了一个字节 ,返回范围在0到255 之间的一个整数,该方法的属性为 abstract,必须为子类所实现。
int read(byte b[]);
从输入流中读取长度为b.length的数据 ,写入字节数组b,并返回读取的字节数。
int read (byte b[], int off, int len);
从输入流中读取长度为len的数据 ,写入字节数组b中从索引off开始的位置,并返回读取的字节数。
对于以上方法 ,如果达到流的末尾位置 ,刚返回-1表明流的结束。
int available();
返回从输入流中可以读取的字节数。
long skip(long n);
输入流的当前读取位置向前移动n字节 ,并返回实际跳过的字节数。
(2)关闭流并且释放与该流相关的系统资源
close();
关闭流可以通过调用方法close()显式进行 ,也可以由运行时系统在则流对象进行垃圾收集时隐式进行。
(3)使用输入流中的标记
void mark(int readlimit);
在输入流的当前读取位置作标记 。从该位置开始读取readlimit所指定的数据后,标记失效。
void reset();
重置输入流的读取位置为方法mark()所标记的位置。
Boolean markSuppont();
确定输入流是否支持方法mark()和reset()。
2、OutputStream所提供的方法主要有:
(1)输出数据
void write(int b);
将指定的字节b写入输出流。该方法的属性为abstract ,必须为子类所实现。
注意:参数中的b为int类型,如果b的值大于255,则只输出它的低位字节所表示的值。
void write(byte b[]);
把字节数组b中的b.length个字节写入输出流。
void write(byte b[], int off, int len);
把字节数组b中从索引off开始的len个字节写入输出流。
(2)flush()
刷空输出流,并输出所有被缓存的字节。
(3)关闭流
与类InputStream类似,可以用方法close()显式地关闭输出流,也可以由运行时系统在对流对象进行垃圾收集时隐式关闭输出流。
通常OutputStream中的方法需在于类中被重写,以提高效率或是适合于特定流的需要。
3、BufferedInputStream
BufferedInputStream和 BufferedOutputStream 在读/写的同时对数据进行缓存,从而减少对数据源的访问,提高运行效率。
4、读写文件示例:
写文件
FileInputStream fis = new FileInputStream("README.txt");
FileOutputStream fos = new FileOutputStream("abc.txt");
byte[] data = new byte[1024];
int size = fis.read(data);
while(size!=-1)
{
fos.write(data,0,size);
size = fis.read(data);
}
读文件
FileInputStream fis = new FileInputStream("README.txt");
byte[] data = new byte[1024];
int size = fis.read(data);
while(size!=-1)
{
System.out.println(new String(data,0,size));
size = fis.read(data);
}
带buffer的读文件
//节点流
FileInputStream fis = new FileInputStream("README.txt");
//处理流
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] data = new byte[1024];
int size = bis.read(data);
while(size!=-1)
{
System.out.println(new String(data,0,size));
size = bis.read(data);
}
四、Reader/Writer
1、Reader(读)
读文件(FileReader)实例:
FileReader fr = new FileReader("README.txt");
//int data = fr.read();
char[] data = new char[1024];
int size = fr.read(data);
while(size!=-1)
{
System.out.print(new String(data,0,size));
size = fr.read(data);
}
2、Writer(写)
五、RandomAccessFile(随机访问文件)
允许对文件内容同时进行读写: Datainput DataOutput
1、处理方法
int skipBytes(int n) 指针向下移动若干字节
readInt. writeDouble ...
length() 返回文件长度
long getFilePointer() 指针当前位置
void seek(long pos) 指针调到所需位置
void setLenght(long newLenght) 设置文件长度
RandomAccessFile(File file,String mode)
RandomAccessFile(String name,String mode)
2、读写方法
r 只读 rw 读写 rws 同步读写 rwd 数据同步读写
3、示例:随机文件操作
raf=new RandomAccessFile("primes.bin","rw");
raf.seek(0);
raf.writeInt(2); //写入整形
- IO架构
- 【 Java】IO流架构
- IO流架构
- java io的架构
- Unity客户端架构-io
- Oracle IO架构
- mozilla的分层IO架构
- Java的IO流架构
- Java的IO流架构
- X86架构IO端口表
- Java IO体系架构图
- IO与文件读写---Java的IO流架构
- IO与文件读写---Java的IO流架构
- IO与文件读写---Java的IO流架构
- Unix,Linux,Windows的IO架构
- 现在IO总线体系架构----PCI-E
- 7.1 虚拟机直接IO原理与架构
- 一般IO口ESD回路架构
- C#获得当前经纬度
- Hibernate访问多个数据库的方法
- OllyDbg载入就退出
- 不让Windows 2000对MSN7.5说NO!
- PreTranslateMessage
- IO架构
- IP组播及IGMP协议
- Microsoft Expression
- Struts2+Spring2+Hibernate3 web应用示例(六)
- autodesk(欧特克)CAD发展简史
- Shell中的特殊字符
- _variant_t 数据类型
- linux中nagios配置详解
- 制作64M启动型+系统维护U盘,支持WINPE+CDLinux+DOS7