A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天涯111 中级黑马   /  2015-5-29 10:38  /  737 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


通过这几天对Java的输入输出流的学习我了解到IO流有三种分类方式:
1.按流的方向分类可分为:输入流和输出流
2.按流的数据单位不同分类可分为:字节流和字符流
3.按流的功能不同分类可分为:节点流和处理流
其中节点流表示的是直接操作节点(如文件,键盘)的流,例如FileInputStream。
    处理流(过滤流)表示的是对节点流进行了操作(加工)的类,例如InputStreamReader。

在IO流中有四大抽象类如下:
字符流:Reader(读) Writer(写) 其对象继承关系如下:
Reader抽象类里子类有:BufferedReader和InputStreamReader,而InputStreamReader里子类有FileReader。
Writer抽象类里子类有:BufferedWriter和OutputStreamWriter,而OutputStreamWriter里子类有FileWriter。
字节流:InputStream(读数据)  OutputStream(写数据)  其对象继承关系如下:
InputStream抽象类里子类有:FileInputStream,而FileInputStream里有子类BufferedInputStream。
OutputStream抽象类里子类有:FileOutputStream,而FileOutputStream里有子类BufferedOutputStream。

其它常用与流有关的对象有:
文件类对应的对象有:File
打印流对应的对象有:PrintStream和PrintWrite
管道流对应的对象有:PipedInputStream和PipedOutputStream
序列流对应的对象有:SequenceInputStream
对象序列化流对应的对象有:ObjectInputStream和ObjectOutputStream

节点流类型有:File(文件),Memory Array,Memory String,Pipe。

IO流中所具备的基本功能有两个:读和写
字节流中为InputStream(读),OutputStream(写)
字符流中为Reader(读),Writer(写)
重点注明:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

InputStream的基本方法
int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾
void close() throws IOException 关闭流释放内存资源
long skip(long n) throws IOException 跳过n个字节不读

OutputStream的基本方法
void write(int b) throws IOException 向输出流写入一个字节数据
void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地

Reader的基本方法
int read() throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾

Writer的基本方法
void write(int c) throws IOException 向输出流写入一个字符数据
void write(String str) throws IOException将一个字符串中的字符写入到输出流
void write(String str,int offset,int length)将一个字符串从offset开始的length个字符写入到输出流
void flush() throws IOException将输出流中缓冲的数据全部写出到目的地

缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。缓冲流的构造方法都得传相对应的基类类型
BufferedReader:提供了readLine方法用于高效读取一行字符串
BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行
BufferedInputStream
BufferedOutputStream
转换流:主要作用将字节流转换成字符流。用处较大!转换流在构造时可以指定其编码集合
InputStreamReader需要和InputStream套接
OutputStreamWriter需要和OutputStream套接
例:OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream(文件路径);
osw.getEncoding(); 获得流的编码方式

数据流与字节数组流
数据流主要为实现可以存取Java原始数据类型如long,boolean。数据流就是字节流
DataInputStream需要和InputStream套接
DataOutputStream需要和OutputStream套接
DataInputStream方法:readBoolean() readInt()…
readUTF():网络传输常用方法 读一个Unicode字符串
DataOutputStream方法与DataInputStream基本对应为写的方法

ByteArrayOutputStream baos = new ByteArrayOutputStream ();//此构造函数等于已可以往一个字节数组

里输入内容

baos.toByteArray();//此方法为获取一个字节数组方法返回字节数组

//此方法获取字节数组占了多少字节
new ByteArrayInputStream(一个字节数组).available()
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try
{
       dos.writeDouble(Math.random());
       dos.writeBoolean(true);
       ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
      System.out.println(bais.available());
      DataInputStream dis = new DataInputStream(bais);
      System.out.println(dis.readDouble());
      System.out.println(dis.readBoolean());
      dos.close();
dis.close();
}
catch (IOException e)
{
      e.printStackTrace();
}
以上为我这几天看视屏和参考一些书籍学到的东西,如果有写的不对的地方希望大家指出,最后一段代码还有点不懂,希望有大神可以帮忙加注释,万分感谢!!!!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马