字节流

 

IO(Input  Output)流

IO流用来处理设备之间的数据传输

Java对数据的操作是通过流的方式

Java用于操作流的类都在IO包中

流按流向分为两种:输入流,输出流。

流按操作类型分为两种:字节流与字符流。 

字节流可以操作任何数据,字符流只能操作纯字符数据,比较方便。

IO流常用父类

字节流的抽象父类

InputStream ,OutputStream

字符流的抽象父类:

Reader , Writer  

读取文件

创建FileInputStream对象, 指定一个文件. 文件必须存在, 不存在则会抛出FileNotFoundException

使用read()方法可以从文件中读取一个字节. 如果读取到文件末尾会读到-1

读取结束后需要释放资源, 调用close()方法关闭输入流

写出文件

创建FileOutputStream对象, 指定一个文件. 文件不存在会创建新文件, 存在则清空原内容. 如果需要追加, 在构造函数中传入true.

使用write()方法可以向文件写出一个字节.

写出结束后同样需要调用close()

拷贝文件

可以从文件中逐个字节读取, 逐个字节写出, 但这样做效率非常低

我们可以定义一个数组作为缓冲区, 一次读取多个字节装入数组, 然后再一次性把数组中的字节写出

使用FileInputStream和FileOutputStream, 逐个字节拷贝

使用FileInputStream和FileOutputStream, 定义一个大数组(length等于文件大小), 一次性拷贝

使用FileInputStream和FileOutputStream, 定义一个小数组(例如1024), 多次拷贝

使用BufferedInputStream和BufferedOutputStream内置的缓冲区, 逐个字节拷贝

常用方法
  InputStream:
   read()               读取一个字节
   read(byte[])         读取若干(数组长度)字节
   available()          获取可读的字节数
   close()              关闭流, 释放资源
  OutputStream:
   write(int)            写出一个字节
   write(byte[])         写出数组中的所有字节
   write(byte[],start,len);
   close()               关闭流, 释放资源                    

 BufferedInputStream
  BufferedInputStream内置了一个缓冲区(数组)
  从BufferedInputStream中读取一个字节时
  BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个
  程序再次读取时, 就不用找文件了, 直接从缓冲区中获取
  直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个

BufferedOutputStream
  BufferedOutputStream也内置了一个缓冲区(数组)
  程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中
  直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里

总结:

在字节流中什么文件都可以读取

所有的文件都是通过0101的数据进行转换而得到的

缓冲区是为了提高字节传输的效率

 

 

 

 

posted @ 2013-11-09 18:31  小痞  阅读(340)  评论(0编辑  收藏  举报