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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heimafeng 中级黑马   /  2015-8-17 23:04  /  341 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

4、 字符流和字节流的区别
  • 字节流读取的时候,读到一个字节就返回一个字节。字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在 UTF-8码表中是 3 个字节)时。先去查指定的编码表,将查到的字符返回。
  • 字节流可以处理所有类型数据,除文本数据外如图片,mp3,avi 。而字符流只能处理文本数据

5、字符流的扩展分类
  • 打印流 :一般是打印到控制台,可以进行控制打印的地方。
  • 管道流 :PipedInputStream的一个实例要和PipedOutputStream的一个实例共同使用,共同完成管道的读取写入操作。主要用于线程操作。
  • 序列流 :可以将流合并,可以用于数据的切割和合并。
  • 对象序列化流:对象序列化,把对象直接转换成二进制,写入介质中。使用对象流需要实现Serializable接口,否则会报错。IO流(字节流)
    字节流:
      输出流:OutputStream(抽象):
        |--FileOutputStream:
        构造方法:文件可以不存在,会自动创建
         FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。
         FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。
         FileOutputStream(File file)  创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
         FileOutputStream(File file, boolean append) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
        写入:
         void write(int n):写入一个字节;
         void write(byte[] byteArray):写入一个字节数组;
         void write(byte[] byteArray ,int off,int len):写入一个字节数组的一部分;
      输入流:InputStream(抽象):
        |--FileInputStream:
        构造方法:(文件必须存在,否则抛出异常)
         FileInputStream(String fileName):
         FileInputStream(File file):
        读取:
         int read():一次读取一个字节;
         int read(byte[] b):一次读取一个字节数组,返回:读取的字节数;
    字符流:
      输出流:Writer:
      输入流:Reader:
    例子:
    public class Demo {
    public static void main(String[] args) throws IOException {
      // 1.构造一个BufferedOutputStream
      BufferedOutputStream out = new BufferedOutputStream(
             new FileOutputStream("bufferdOutput.txt"));
      
      //分开写
      /*
      FileOutputStream fileOut = new FileOutputStream("aa.txt");
      BufferedOutputStream bufOut = new BufferedOutputStream(fileOut);
      */
      //2.写入文件
      out.write("你好Java".getBytes());
      out.write("Hello".getBytes());
      out.write("Worlddddddddd".getBytes());
      
      //3.刷新缓冲区
      
    // out.flush();
      
      //4.释放资源
      out.close();//先flush(),再close()
    }
    }
    四:字节流四种方式复制MP4并测试效率
      
      --基本流:
       1.FileInputStream:
         FileOutputStream:
        1).一次读、写一个字节; method1()--> 58250 毫秒
        2).一次读、写一个字节数组; method2()--> 105 毫秒!
      --缓冲流:
      2.BufferedInputStream:
        BufferedOutputStream:
         3).一次读、写一个字节  method3()--> 968 毫秒!
         4).一次读、写一个字节数组: method4()--> 70 毫秒!

      五:转换流--输出流:
      字节流:
        输出流:OutputStream
        输入流:InputStream
      字符流:
        输出流:Writer
        |-OutputStreamWriter:将字节输出流转换为字符输出流;
        输入流:Reader
         |--InputStreamReader:将字节流的输入流,转换为字符的输入流;
      
      构造方法:这也是转换流的作用:可以将"字节流"转换为"字符流"
      public OutputStreamWriter(OutputStream out)
      public OutputStreamWriter(OutputStream out,String charsetName)
  • 写入的方法:
      public void write(int c):写入一个字符;
      public void write(char[] cbuf):写入一个字符数组
      public void write(char[] cbuf,int off,int len):写入一个字符数组的一部分
      public void write(String str):写入一个字符串
      public void write(String str,int off,int len):写入一个字符串的一部分;

6、总结一.数据输入输出流:
DataOutputStream:
DateInputStream:
可以输出任何的Java基本数据类型。所以,读取的时候,要按照
写入时的字节数,读取。

二.内存操作流:
ByteArrayOutputStream:
ByteArrayInputStream:
byte[]数组的缓冲区;就是用来缓存byte[]数组
三.打印流:
1.字符流:PrintWriter:
2.字节流:PrintStream:
特点:
  1.只有输出流,没有输入流;
  2.可以读写任何的数据类型;
  3.部分功能带自动刷新,换行;
  4.可以操作文件;
3.标准输入输出流:
  System.in : BufferedInputStream:
  System.out: PrintStream;
四.字节流转换为字符流:(必须掌握)
字节流    -->    转换流      -->      字符流
PrintStream      OutputStreamWriter  BufferedWriter

PrintStream ps = System.in;
OutputStreamWriter out = new OutputStreamWriter(ps);
BufferedWriter bw = new BufferedWriter(out);

五.随机访问流:
RandomAccessFile:不属于"流"类。它内部封装了InputStream和OutputStream
对文件进行读写操作:
构造方法:
RandomAccessFile(String fileName,String mode):mode:"r"只读;"rw":读写;
成员方法:
writeXxxx();
readXxxxx();
getFilePointer():获取当前文件指针
seek():设置当前文件指针;
六.序列化和反序列化:
序列化:ObjectOutputStream:
  注意:1.序列化的类必须实现:Serializable接口(标记接口)
        2.添加一个成员变量:serialVersionUID
  成员方法:
   writeObject(Object obj):
反序列化:
  ObjectInputStream:
  成员方法:
   readObject();
  
七.Properties类:
1.它就是一个Map集合,继承自:Hashtable;
2.继承的: pub(Object key,Object value)  get(Object key)  keySet()
   特有的: setProperty(String key,String value) getProperty(String key) stringPropertyNames()
3.操作配置文件相关:
  load(Reader read):读取配置文件的信息;
  store(Writer out,String com):将集合中的数据写入到配置文件;
八.NIO的一个案例:
1.public static long copy(Path source, OutputStream out) :复制文件
2.public static Path write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options):

3 个回复

倒序浏览
风华正茂 来自手机 中级黑马 2015-8-18 12:30:13
沙发
谢谢楼主分享,楼主辛苦了
回复 使用道具 举报
666  整理的很好
回复 使用道具 举报
lh5484826 来自手机 中级黑马 2015-8-18 13:58:45
板凳
总结的很仔细。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马