IOStream 2

April 27th

  1. 字符流
  • 文本文件用字节流读取 可能会出现乱码,所以要用到字符流

fileWriter是有缓存的,先存到缓存中,字节流没有缓存直接写到文件中。
out.flush(), 刷新缓存
关闭的时候会调用刷新的方法


字符输出流

按照字符来进行读取,一个英文是一个字符,一个中文也是一个字符
如果操作的是文本类型的文件,使用字符流操作,
如果是非文本类型的文件,使用字节流操作。

  • 字符输入流
    字符输入
  1. 字节字符转换流
    复制文件
  public class CopyFileDemo {
      public static void copyFile(File target, String dest) {
  String fileName = target.getName();
      File destFile = new File(dest + fileName);
      try {
          InputStream in = new FileInputStream(target);
          OutputStream out = new FileOutputStream(destFile);
          byte[] bytes = new byte[1024];
          int len = -1;
          while ((len = in.read(bytes)) != -1) {
              out.write(bytes, 0, len);
          }
          out.close();
          in.close();

      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }}public static void main(String[] args) {
      // TODO Auto-generated method stub
      File Target = new File("//Users//Zellerpooh//Desktop//images//dddddb.jpg");
      String dest = "//Users//Zellerpooh//Desktop";
      copyFile(Target, dest);
      System.out.println("文件复制成功");
        }
  } ```

  交换
  ```
  public class ChangeStreamDemo {
      public static String reader(InputStream in){
          BufferedReader reader=new BufferedReader(new InputStreamReader(in));
          try {
              return reader.readLine();
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          return null;
//          Reader reader=new InputStreamReader(in);
//          char[] cs=new char[1024];
//          int len=-1;
//          StringBuffer buf=new StringBuffer();
//          try {
//              while((len=reader.read(cs))!=-1){
//               buf.append(new String(cs,0,len));
//              }
//              reader.close();
//              return buf.toString();
//          } catch (IOException e) {
//              // TODO Auto-generated catch block
//              e.printStackTrace();
//          }
//          return null;
      }
      public static void main(String[] args) {
//          Scanner input=new Scanner(System.in); 控制台输入,只有字节流
          String info=reader(System.in);
          System.out.println(info);
      }
}

   ```
3. 缓冲流
对文件或其它目标频繁的读写操作,效率低,性能差。
首先要明确一个概念:
使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来

BufferedInputStream: 为另一个输入流添加一些功能,在创建 BufferedInputStream 时,会创建一个内部缓冲区数 组,用于缓冲数据。

BufferedOutputStream:通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字 节写入调用底层系统。

BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

![BufferedInputStream](http://upload-images.jianshu.io/upload_images/1859111-260810cb14d07ec7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![BufferedOutputStream](http://upload-images.jianshu.io/upload_images/1859111-d687c9e95360335f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![BufferedReader](http://upload-images.jianshu.io/upload_images/1859111-b612da3e7bd79e12.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![BufferedWriter](http://upload-images.jianshu.io/upload_images/1859111-0e03a7aad5ae501d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4. 打印流
打印流的主要功能是用于输出,在整个IO包中打印流分为两种类型: 字节打印流:PrintStream
字符打印流:PrintWriter
打印流可以很方便的进行输出

5.  对象流
效率不高,真实使用时很少使用
> 类需要实现Serializable接口   transient 表示该属性不用序列化

![ObjectStream](http://upload-images.jianshu.io/upload_images/1859111-beff3d04c6b1c96f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

6. 字节数组流
包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。 关闭
ByteArrayInputStream
ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。 ByteArrayOutputStream
此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。 关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调 用,而不会产生任何 IOException。

7. 数据流
DataInputStream:
数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出 流写入稍后由数据输入流读取的数据。 DataInputStream 对于多线程访问不一定是安全的。 线程安全是可选的, 它由此类方法的使用者负责。
DataOutputStream:
数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将 数据读入。

8. 字符串流
StringReader 其源为一个字符串的字符流。
StringWriter
一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。 关闭 StringWriter 无效。此类中的方法在关闭 该流后仍可被调用,而不会产生任何 IOException。
9. RandomAccessFile
RanndomAccessFile是IO包的类,从Object直接继承而来。 只可以对文件进行操作,可以对文件进行读取和写入。 当模式为r是,当文件不存在时会报异常,当模式为rw时,当文件不存在时,会自己动创建文件,当文件已经 存在时 不会对原有文件进行覆盖。

RandomAccessFile有强大的文件读写功能,其内部是大型 byte[],可以通过seek(),getFilePointer()等方法操作的 指针,方便对数据进行写入与读取。还可以对基本数据类型进行直接的读和写操作。

RandomAccessFile的绝大多数功能,已经被JDK 1.4的nio的“内存映射文件(memory‐mapped files)”给取代了,你该考 虑一下是不是用“内存映射文件”来代替RandomAccessFile了。
![RandomAccessFile](http://upload-images.jianshu.io/upload_images/1859111-e256802ebd0fce2f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容