字符流和字节流的主要区别:

1.字节流读取的时候,读到一个字节就返回一个字节;  字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。

2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

   字节流:

   1、通过字节流写数据

code:

  1. package com.test;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.UnsupportedEncodingException;
  7.  
  8. public class WriteByteStream {
  9.  
  10. public static void main(String[] args) {
  11. try {
  12.  
  13. FileOutputStream fos = new FileOutputStream("textw.txt");
  14. String outString = "write 123456写出数据";
  15. byte output[] = outString.getBytes("UTF-8");
  16. fos.write(output);
  17. fos.close();
  18.  
  19. } catch (FileNotFoundException e) {
  20. e.printStackTrace();
  21. } catch (UnsupportedEncodingException e) {
  22. e.printStackTrace();
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27.  
  28. }

2、通过字节流读数据:

code:

  1. package com.test;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.io.UnsupportedEncodingException;
  7.  
  8. public class ReadByteStream {
  9.  
  10. public static void main(String[] args) {
  11. try {
  12. FileInputStream fis = new FileInputStream("text.txt");
  13. byte input[] = new byte[];
  14. fis.read(input);
  15.  
  16. String inputString = new String(input, "UTF-8");
  17. System.out.println(inputString);
  18. fis.close();
  19.  
  20. } catch (FileNotFoundException e) {
  21. e.printStackTrace();
  22. } catch (UnsupportedEncodingException e) {
  23. e.printStackTrace();
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. }
  27.  
  28. }
  29.  
  30. }

3、使用字节流读写数据

code:

  1. package com.test;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7.  
  8. public class CopyByByteStream {
  9.  
  10. public static void main(String[] args) {
  11. try {
  12.  
  13. FileInputStream fis = new FileInputStream("movie.mp4");
  14. FileOutputStream fos = new FileOutputStream("movie_new.mp4");
  15.  
  16. byte input[] = new byte[];
  17. long before = System.currentTimeMillis();
  18. int count = ;
  19. while (fis.read(input) != -) {
  20. fos.write(input);
  21. count++;
  22. }
  23. fos.flush();
  24. fis.close();
  25. fos.close();
  26. System.out.println(System.currentTimeMillis()-before+"ms");
  27. System.out.println("done");
  28.  
  29. } catch (FileNotFoundException e) {
  30. e.printStackTrace();
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35.  
  36. }

4、使用带缓冲的字节流读写数据(字节流模板)

code:

  1. package com.test;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8.  
  9. public class ReadByBufferedByteStream {
  10.  
  11. public static void main(String[] args) {
  12. try {
  13.  
  14. FileInputStream fis = new FileInputStream("movie.mp4");
  15. BufferedInputStream bis = new BufferedInputStream(fis,);
  16. FileOutputStream fos = new FileOutputStream("moive_new.mp4");
  17. BufferedOutputStream bos = new BufferedOutputStream(fos,);
  18. //大型文件对应的数组可以大一些,小文件对应的数组小一些
  19. byte input[] = new byte[];
  20. int count = ;
  21. long before = System.currentTimeMillis();
  22. while (bis.read(input) != -) {
  23. bos.write(input);
  24. count++;
  25. }
  26. bos.flush();
  27. bis.close();
  28. fis.close();
  29. bos.close();
  30. fos.close();
  31. System.out.println(System.currentTimeMillis()-before+"ms");
  32. System.out.println("读取了:"+count+"次");
  33.  
  34. } catch (FileNotFoundException e) {
  35. e.printStackTrace();
  36. } catch (IOException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40.  
  41. }

  字符流:

  1、使用字符流读写数据

  code:

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.io.UnsupportedEncodingException;
  9.  
  10. public class RWByCharStream {
  11.  
  12. public static void main(String[] args) {
  13. try {
  14.  
  15. //File file = new File("java.txt");
  16. FileInputStream fis = new FileInputStream("java.txt");
  17. FileOutputStream fos = new FileOutputStream("java_new.txt");
  18. InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
  19. OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
  20. char input[] = new char[];
  21. int l = ;
  22. while ((l = isr.read(input)) != -) {
  23. //String inputString = new String(input,0,l);
  24. osw.write(input,,l);
  25. }
  26. isr.close();
  27. fis.close();
  28. osw.close();
  29. fos.close();
  30. System.out.println("done");
  31.  
  32. } catch (FileNotFoundException e) {
  33. e.printStackTrace();
  34. } catch (UnsupportedEncodingException e) {
  35. e.printStackTrace();
  36. } catch (IOException e) {
  37. e.printStackTrace();
  38. }
  39.  
  40. }
  41.  
  42. }

2、使用带有缓冲的字符流读写数据(字符流模板)

code:

  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStreamWriter;
  9. import java.io.PrintWriter;
  10. import java.io.UnsupportedEncodingException;
  11.  
  12. public class RWByBufferedCharStream {
  13.  
  14. public static void main(String[] args) {
  15. try {
  16.  
  17. //File file = new File("java.txt");
  18. FileInputStream fis = new FileInputStream("java.txt");
  19. FileOutputStream fos = new FileOutputStream("java_new_buff.txt");
  20. InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
  21. OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
  22.  
  23. BufferedReader br = new BufferedReader(isr);
  24. //BufferedWriter bw = new BufferedWriter(osw);
  25. PrintWriter pw = new PrintWriter(osw,true);
  26.  
  27. String input;
  28. while ((input = br.readLine()) != null) {
  29. //bw.write(input);
  30. pw.println(input);
  31. }
  32. br.close();
  33. //bw.flush();bw.close();
  34. pw.close();
  35. isr.close();
  36. fis.close();
  37. osw.close();
  38. fos.close();
  39. System.out.println("done");
  40.  
  41. } catch (FileNotFoundException e) {
  42. e.printStackTrace();
  43. } catch (UnsupportedEncodingException e) {
  44. e.printStackTrace();
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49.  
  50. }

java_IO流小结的更多相关文章

  1. java IO 流小结

    java IO 流小结 java流类图结构 流的分类 按方向 输入流 输出流 按类型 字节流 字符流 结论:只要是处理纯文本数据,就优先考虑使用字符流. 除此之外都使用字节流.

  2. Java_IO流_File类配合使用(其中用到了递归)

    第一:Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.以下对Java File文件操作以及常用方法进行简单介绍 案例1:遍历出指定目录下的文件夹,并输出文件名 stat ...

  3. Java API —— IO流小结

    练习题: 1.复制文本文件 package cn.itcast_01; import java.io.BufferedReader; import java.io.BufferedWriter; im ...

  4. javaIO流小结(1)

    UTF-8的字节占多少个字节? 常用中文字符用utf-8编码占用3个字节(大约2万多字),超大字符集中要占4个字节.在内存中是2个字节,真正写到硬盘上面的是3个字节. GBK.GB2312汉字占2个字 ...

  5. java_IO流之 NIO

    NIO 定义 即新IO,在JDK1.4的java.nio.*包中引入,其目的在于提高速度. 在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生 ...

  6. (27)IO流小结

    字节流 输入字节流: ---------| InputStream 所有输入字节流的基类. 抽象类 ------------| FileInputStream 读取文件的输入字节流 --------- ...

  7. java_IO流

    IO流概述及分类 Reader  InputStream  OutputStream  Writer都是Object的直接子类 字节流: 字节输入流 InputStream(抽象类) |---File ...

  8. Java_IO流_抽象类

    一.   概念 流动,从一端流向另一端,源头与目的地 以程序为中心,程序与 数组/文件/网络连接/数据库, 二.   io流分类 流向:输入流与输出流 数据 :字节楼:二进制,所有文件都可以操作,包括 ...

  9. C++ IO流小结

    撒花庆祝下,终于看完了(C++Primer)第一部分,即将进入第二部分! IO部分,最基本的是iostream(istream.ostream),子类有fstream(ifstream.ofstrea ...

随机推荐

  1. SurfaceView类透明背景设置

    将SurfaceView背景设置为透明,主要添加以下几句话就可以了: 在SurfaceView创建后设置一下下面的参数: setZOrderOnTop(true); getHolder().setFo ...

  2. uva 10560 - Minimum Weight(数论)

    题目连接:uva 10560 - Minimum Weight 题目大意:给出n,问说至少须要多少个不同重量的砝码才干称量1~n德重量,给出所选的砝码重量,而且给出k,表示有k个重量须要用上述所选的砝 ...

  3. angularjs之双向绑定

    今天所学习的东西虽然不是很多 但是对我来说受益匪浅, 就比如说在table中要选中一行的话我们可以这样写: 模板中: <table ng-controller="tableContro ...

  4. 数据持久化之CoreData

    再次回归博客园, 已经实属不易了, 面临这近期忙忙碌碌的项目开发, 虽然并不是完全的没有闲暇时间, 但是怎么说呢, 也有着各种的无奈与曲折, 面临这产品需求的不断变化和页面的不断更新, 对于一个程序员 ...

  5. Linux中的小程序—— 进度条

    在说正事之前,首先科普一下在什么是回车什么是换行? 我们通常所说的回车就是从一行的末尾跳到另一行的开头,但事实上这却是由回车和换行两个动作所完成的,也就是键盘上<enter>所完成的工作. ...

  6. 初探R语言——R语言笔记

    R语言使用 <-  赋值 # 作为注释符号 c()函数用于作为向量赋值,例如age<-c(1,2,3,4,5) mean()用于求向量的平均值 sd()求向量的标准差 cor(a,b)求a ...

  7. swift和oc混编

    请参考这篇博客:点击查看

  8. 定时改变App主题的方案

    1.将接口返回的图片缓存到本地,由于写data到本地是耗时操作,为了不阻塞主线程,可开启子线程来做此操作 dispatch_queue_t queue = dispatch_queue_create( ...

  9. 随机获取oracle数据库中的任意一行数据(rownum)

    最近看oracle资料的时候,了解rownum的概念,以前只知道对数据库表进行简单的增删改查: 看到了rownum的概念后,突然想到了好多业务场景应该都可以适用的,比如在进行随机发奖的时候, 我们就可 ...

  10. 左右推拽显示对比图 - jQyery封装 - 附源文件

    闲来无事,做了一个模块效果 左右拖拽显示对比图,是用jq封装的 利用鼠标距离左侧(0,0)坐标的横坐标位移来控制绝对定位的left值 再配合背景图fixed属性,来制作视觉差效果 代码如下 <! ...