Java中的流(IO流.

java.io包中定义了多个流类型(类或抽象类)来实现 输入 / 输出功能,可以从不同的角度对其进行分类:

按单位可分为: 字节流         (一个字节一个字节的读取) 字符流         (一个字符一个字符的读取『一个字符是两个字节』)

按功能不同可以分为: 节点流      (数据的传输) 处理流      (数据的处理)

按方向可以分为: 输入流         (相对于程序来说的) 输出流         (相对于程序来说的)

以下 输出输出流 图中深色的为节点流,浅色为处理流。 InputStream 继承自该类的流都是用于向程序中输入数据,且数据的单位为字节(8bit);

基本方法:

OutputStream 继承自该类的流是用于程序中输入数据,且数据的单位为字节(8bit);

基本方法:

Reader 继承自该类的流都是用于向程序中输入数据,且数据的单位为字符(16bit);

常用方法:

Writer 继承自该类的流都是用于程序中输入数据,且数据的单位为字符(16bit);

常用方法:

缓冲流: 缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,可以降低硬盘的读写次数,同时增加了一些新的方法。 SDK提供了四种缓存流,其常用的构造方法为:

转换流(转换编码):

Print流 用于输出

在使用中如下: new InputStreamReader(System.in);//监听读取键盘的输入 PrintWriter log = new PrintWriter(输入流); 另外实例:     PrintStream ps = null;     try {       FileOutputStream fos =               new FileOutputStream(“d:\\bak\\log.dat”);       ps = new PrintStream(fos);     } catch (IOException e) {       e.printStackTrace();     }     if(ps != null){       System.setOut(ps);     }

Object流 该类的Object流是保存对象用的。 注意代码:             FileOutputStream fos = new FileOutputStream(file);             BufferedOutputStream bos = new BufferedOutputStream(fos); 才可进行写的操作。 要保存对象,必须要求该对象的实体类是可序列化的『Serializable』。 transient关键字 在序列化的实体类中,使用transient关键字修饰的属性,被修饰的属性被视作透明不存在的。 实现Externalizable接口是自己写序列化,保存对象的输出流方法。

具体如下图所示:

示例代码:     public void InputStreamTest() {         /**          * 创建文件夹以及文件          */         String sep = File.separator;         String path = “E:” + sep + “MyTest”;         String fileName = “document.txt”;         File file = new File(path, fileName);         if (file.exists()) {             System.out.println(“文件路径:”+file.getAbsolutePath());             System.out.println(“文件大小:”+file.length());         } else {             file.getParentFile().mkdirs();             try {                 file.createNewFile();             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }

/**         * 字节读取文件          */         try {             FileInputStream fis = new FileInputStream(file);             BufferedInputStream bis = new BufferedInputStream(fis);    //这些Buffered**的都是处理流(缓冲)             int b ;             while ((b=bis.read())!=-1) {                 System.out.print((char)b);             }             bis.close();             System.out.println(“\n\n”);         } catch (FileNotFoundException e) {             // TODO Auto-generated catch block             System.out.println(“未找到文件”);             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }

/**          * 字符读取文件          */         try {             FileReader fileReader = new FileReader(file);             BufferedReader br = new BufferedReader(fileReader);             int b ;             while ((b=br.read())!=-1) {     //使用br.readLine();可读一行数据                 System.out.print((char)b);             }             br.close();         } catch (FileNotFoundException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }

/**          * 字节输入文件          */         try {             FileOutputStream fos = new FileOutputStream(file);             BufferedOutputStream bos = new BufferedOutputStream(fos);             String str = new String(“所有的中文测试”);             byte[] c=str.getBytes();             bos.write(c);             bos.flush();             bos.close();         } catch (FileNotFoundException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }                 /**          * 字符输入文件          */         try {             FileWriter fw = new FileWriter(file,true);//写上true代表在原有的字符串后面继续写入             BufferedWriter bw = new BufferedWriter(fw);             String str = “受了点伤”;             bw.write(str.toCharArray());             bw.flush();      //将缓存中的数据完全打印             bw.close();         } catch (IOException e) {             // TODO Auto-generated catch block             System.out.println(“文件读写错误”);             e.printStackTrace();         }                 /**          * Data数据流测试,这个子类是将对象保存到了“*.txt”文件中,在文件中显示乱码          * 因为是将对象保存到了  txt  文件中,所以无法正常显示。          */         try {             FileOutputStream fos = new FileOutputStream(file);             BufferedOutputStream bos = new BufferedOutputStream(fos);             DataOutputStream dos = new DataOutputStream(bos);             double dou = Math.random();             System.out.println(dou);             dos.writeDouble(dou);             dos.flush();             dos.close();         } catch (FileNotFoundException e1) {             // TODO Auto-generated catch block             e1.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }                 /**         * Data数据流在程序之间的传递         */         try {             ByteArrayOutputStream baos = new ByteArrayOutputStream();             DataOutputStream dos = new DataOutputStream(baos);             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 (FileNotFoundException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }                 /保存对象///stu对象必须实现了Serializable接口,也就是必须可序列化         public void forSaveObject(Student stu){         try {             FileOutputStream fos = new FileOutputStream(“E:/dd.dox”);             ObjectOutputStream oos = new ObjectOutputStream(fos);             oos.writeObject(stu);             oos.flush();             oos.close();         } catch (FileNotFoundException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     }

}

java 中的流_Java中的流(IO相关推荐

  1. java 网络通讯用什么流_Java中打印流,网络通信协议,TCP通信的基础介绍

    1-1.打印流 java.io.PrintStream:打印流 PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式. PrintStream特点: 1).只负责数据 ...

  2. java byte数组转化为流_java中字节数组和字符串、IO流和字节数组之间的转换

    在实际开发中经常会碰到乱码问题: 首先查看系统支持的编码方式,默认的编码方式 //检查java支持的编码 System.out.println(Charset.availableCharsets(). ...

  3. java中什么是字节流和字符流_java中字节流与字符流的区别是什么

    字节(Byte)是进行io操作的基本数据单位,在程序进行字节数据输出时可以使用OutputStream类完成 此类定义如下: public abstract class OutputStream ex ...

  4. java文件与流_Java文件和流深入

    1.什么是数据流? 数据流是指所有的数据通信通道.有两类流,InputStream and OutputStream,Java中每一种流的基本功能依赖于它们.InputStream用于read,Out ...

  5. java i o是什么流_Java I/O 流,输入流、输出流

    Java中的流,可以从不同的角度进行分类. 按照数据流的方向不同可以分为:输入流和输出流. 按照处理数据单位不同可以分为:字节流和字符流. 按照实现功能不同可以分为:节点流和处理流. 输出流: 输入流 ...

  6. java 异常处理发生异常_Java中的异常处理

    java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...

  7. java -jar 工作原理_Java 中的 jar ,天天见,可是你知道它的运行机制吗?

    本文由读者 muggle 投稿,muggle 是一位极具极客精神的 90 后单身老实猿,他的博客地址是:http://muggle.javaboy.org/ 今天介绍两个大家每天都在用但是却很少去了解 ...

  8. java log日志函数_Java 中的 AWS Lambda 函数日志记录 - AWS Lambda

    AWS 文档中描述的 AWS 服务或功能可能因区域而异.要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门. 本文属于机器翻译版本.若本译文内容与英语原文存在差异,则一律以英文原文为准. Ja ...

  9. java文件与流_Java文件与流

    文件 文件管理通过java.io包下.file类 作用: 1.文件属性 2.文件检查 3.文件删除 4.不包含对其文件内容的处理 File类的构造 语法: File f =new File(Strin ...

最新文章

  1. 优化查询、访问量大时的优化
  2. 幅度和幅值有区别吗_克拉克 (Clark) 变换中等幅值 (2/3) 和等功率 (sqrt(2/3)) 变换的公式推导...
  3. Dotnet Core
  4. Linux mv命令
  5. 代码执行漏洞原理/防御
  6. 在线数据库设计ERD-ONLINE
  7. 在Windows Server2012系统中安装Oracle11g
  8. Python学习之路day3-文件操作
  9. 关于VOID *在cl与gcc的不同(无意中发现)
  10. 关于深度探索C++对象模型笔记
  11. 关于CefSharp在客户端运行报错的解决方案
  12. Eclipse安装中文语言包
  13. 微型计算机控制技术设计题库,微型计算机控制技术复习题答案
  14. LVDS学习笔记之lvds_transceiver设计及仿真
  15. linux 卸载二进制包,Ubuntu19.10系统的软件安装与卸载命令
  16. 计算机关机慢怎么解决方法,电脑关机很慢,详细教您win7电脑关机很慢的解决方法...
  17. PM Q7声卡使用教程
  18. 学习es6中class——整合阮一峰教程、MDN
  19. 人工智能技术与物联网的融合
  20. 密码 计算安全性 可证明安全性 无条件安全性

热门文章

  1. centos mysql php tomcat_Linux 安装JDK Tomcat MySQL的教程(使用Mac远程访问)
  2. VS2017无法启动
  3. PyMongo--非关系型数据库mongodb入门(一步一步 版)
  4. 趣话题:git三部曲(二)-拆分历史提交记录reset
  5. 荣耀v40可以升级华为鸿蒙,网传荣耀V40机型也能升级鸿蒙OS 首批更新机型有望是这5款...
  6. php中什么时候用传值,php中传值与传引用的区别。什么时候传值什么时候传引用?...
  7. 【算法图解|4】JavaScript 如何求数组的最大值和最小值
  8. 孙叫兽进阶之路之敏捷开发
  9. 当margin-top、padding-top的值是百分比时,分别是如何计算的?
  10. SVN:请求不到主机,应该如何解决?