`
windy2coast
  • 浏览: 55136 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java笔记六

    博客分类:
  • Java
阅读更多

流(Stream)是字节的源或目的。
两种基本的流是:输入流(Input Stream)和输出流(Output Stream)。可从中读出一系列字节的对象称为输入流。而能向其中写入一系列字节的对象称为输出流。

FileInputStream和FileOutputStream
    节点流,用于从文件中读取或往文件中写入字节流。如果在构造FileOutputStream时,文件已经存在,则覆盖这个文件。
BufferedInputStream和BufferedOutputStream
    过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。
DataInputStream和DataOutputStream
      过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。
PipedInputStream和PipedOutputStream
    管道流,用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。

java 代码
  1.  //用FileInputStream和FileOutputStream文件读写   
  2. import java.io.*;   
  3. public class StreamTest {   
  4.  public static void main(String[] args) throws Exception {   
  5.   /*int data;  
  6.   while((data=System.in.read())!=-1) {//读用户输入数据  
  7.    System.out.write(data);写出用户读入数据*/  
  8.      
  9.   //写文件   
  10.   FileOutputStream fos = new FileOutputStream("1.txt");   
  11.   fos.write("http://www.windycool.com".getBytes());   
  12.   fos.close();   
  13.      
  14.   //读文件   
  15.   FileInputStream fis = new FileInputStream("1.txt");   
  16.   byte[] buf = new byte[100];   
  17.   int len = fis.read(buf);   
  18.   System.out.println(new String(buf,0,len));   
  19.   fis.close();   
  20.  }   
  21. }   

 

java 代码

 

  1.  //用BufferedInputStream和BufferedOutputStream文件读写   
  2.   
  3. /*  
  4. 作为另一种输入流,BufferedInputStream 为添加了功能,即缓冲输入和支持  
  5.  mark 和 reset 方法的能力。创建 BufferedInputStream 时即创建了一个  
  6.  内部缓冲区数组。读取或跳过流中的各字节时,必要时可根据所包含的输入流再次  
  7.  填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset  
  8. 操作导致在从所包含的输入流中获取新的字节前,再次读取自最后一次 mark 操作  
  9. 以来所读取的所有字节。   
  10.  */  
  11. import java.io.*;   
  12. public class StreamTest {   
  13.  public static void main(String[] args) throws Exception {   
  14.   FileOutputStream fos = new FileOutputStream("1.txt");   
  15.   BufferedOutputStream bos = new BufferedOutputStream(fos);   
  16.   bos.write("http://www.windycool.com".getBytes());   
  17. //  bos.flush();   
  18.   bos.close();//将fos流链接到了bos流,关闭只需关闭尾端的bos流   
  19.      
  20.   FileInputStream fis = new FileInputStream("1.txt");   
  21.   BufferedInputStream bis = new BufferedInputStream(fis);   
  22.   byte[] buf = new byte[100];   
  23.   int len=bis.read(buf);   
  24.   System.out.println(new String(buf,0,len));   
  25.   bis.close();   
  26.      
  27.  }   
  28. }   
  29.   

java 代码
  1. /*  
  2. public class PipedInputStream  
  3.                  extends InputStream  
  4. 传送输入流应该连接到传送输出流;传送输入流会提供要写  
  5. 入传送输出流的所有数据字节。通常,数据由某个线程从  
  6.  PipedInputStream 对象读取,并由其他线程将其写入到相应的  
  7.  PipedOutputStream。不建议对这两个对象尝试使用单个线程,  
  8. 因为这样可能会死锁该线程。传送输入流包含一个缓冲区,可在缓冲  
  9. 区限定的范围内将读操作和写操作分离开。   
  10.     
  11.     
  12. public class PipedOutputStream  
  13.                   extends OutputStream  
  14. 传送输出流可以连接到传送输入流,以创建通信管道。传送输出流  
  15. 是管道的发送端。通常,数据由某个线程写入 PipedOutputStream   
  16. 对象,并由其他线程从连接的 PipedInputStream 读取。不建议对  
  17. 这两个对象尝试使用单个线程,因为这样可能会死锁该线程。   
  18.  */  
  19.   
  20. import java.io.*;   
  21. public class PipedStreamTest {   
  22.  public static void main(String[] args) {   
  23.   PipedOutputStream pos = new PipedOutputStream();   
  24.   PipedInputStream pis = new PipedInputStream();   
  25.   try {   
  26.    pos.connect(pis);   
  27.    new Producer(pos).start();   
  28.    new Consumer(pis).start();   
  29.   }   
  30.   catch(Exception e) {   
  31.    e.printStackTrace();   
  32.   }   
  33.  }   
  34. }   
  35. class Producer extends Thread {   
  36.  private PipedOutputStream pos;   
  37.  public Producer(PipedOutputStream pos) {   
  38.   this.pos = pos;   
  39.  }   
  40.  public void run() {   
  41.   try {   
  42.    pos.write("Hello,welcome you!".getBytes());   
  43.    pos.close();   
  44.   }   
  45.   catch(Exception e) {   
  46.    e.printStackTrace();   
  47.   }   
  48.  }   
  49. }   
  50.   
  51. class Consumer extends Thread {   
  52.  private PipedInputStream pis;   
  53.  public Consumer(PipedInputStream pis) {   
  54.   this.pis=pis;   
  55.  }   
  56.  public void run() {   
  57.   try {   
  58.    byte[] buf = new byte[100];   
  59.    int len = pis.read(buf);   
  60.    System.out.println(new String(buf,0,len));   
  61.    pis.close();   
  62.   }   
  63.   catch(Exception e) {   
  64.    e.printStackTrace();   
  65.   }    
  66.  }   
  67. }   
  68. //输出 Hello,welcome you!   
  69.   

Java的I/O库提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。
通过流的链接,可以动态的增加流的功能,而这种功能的增加是通过组合一些流的基本功能而动态获取的。
我们要获取一个I/O对象,往往需要产生多个I/O对象,这也是Java I/O库不太容易掌握的原因,但在I/O库中Decorator模式的运用,给我们提供了实现上的灵活性。


更多孙鑫lesson 7

分享到:
评论

相关推荐

    java笔记java笔记

    java笔记java笔记java笔记java笔记java笔记java笔记java笔记

    java笔记整理(超详细) java笔记整理(超详细)

    6. **重载和重写**: - 重载发生在同一类中,方法名相同,但参数列表不同。 - 重写发生在父子类中,方法名、参数列表必须相同,返回值和异常必须遵守规则。 7. **封装**: - 封装隐藏了对象的复杂性,提供公共...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    java笔记 java笔记

    #### 6. 对象和类 ##### 6.1 面向对象与面向过程 面向对象编程(OOP)是一种编程范式,它强调使用对象来表示和处理问题域中的实体。与之相对的是面向过程编程,它侧重于函数和过程。 ##### 6.2 对象的概念 对象是...

    Java笔记桌面程序

    【Java笔记桌面程序】 在IT领域,开发个人定制的桌面应用程序是解决特定需求的有效方法。本项目名为"Java笔记桌面程序",它是由一个热衷于编程的开发者为解决其所在公司无法使用网络笔记客户端的问题而自创的。这个...

    宋红康java笔记.rar

    【宋红康java笔记】是一份综合性的Java学习资料,由知名编程教育者宋红康编撰。这份压缩包文件包含了大量的Java编程知识点,旨在帮助初学者和有经验的开发者深入理解和掌握Java语言的核心概念与高级特性。以下是根据...

    非常好的java笔记适合初学者

    这份"非常好的java笔记"无疑是初学者踏入这个领域的宝贵资源。笔记由培训班的专业老师编写,内容详细且全面,旨在帮助初学者系统地学习和理解Java的基础知识。 首先,Java基础部分会涵盖变量、数据类型、运算符、...

    大佬的java笔记

    专业的Java笔记可能会涉及这些内容,帮助学习者掌握Java的最新发展。 遗憾的是,由于【部分内容】部分不包含实际的笔记内容,无法进一步提供具体的编程示例和深入的解释。如果要学习Java,最好的方式是从学习Java的...

    java读书笔记笔记笔记笔记笔记笔记

    【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...

    java笔记 java笔记 java笔记

    【标题】:“Java笔记”是Java开发语言的学习记录,涵盖了从基础到高级的全面知识体系。这份笔记旨在帮助开发者深入理解和掌握Java编程的核心概念和技术。 【描述】:这份"Java笔记"来源于网络资源...

    java笔记.zip

    2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 枚举类 2020-4-10 java 注解(Annotation) 2020-4-11 ...

    狂神说Java笔记资料

    《狂神说Java笔记资料》是一份全面涵盖Java开发基础知识的文档集,旨在帮助学习者系统地掌握Java编程。这份笔记包含多个章节,每个章节都深入讲解了一个特定的主题,覆盖了从初学者到进阶开发者必备的知识点。 1. *...

    java全套笔记 来自狂神说java笔录.zip

    【Java笔记内容概览】 1. **基础语法**:涵盖变量、数据类型、运算符、流程控制(条件语句、循环语句)、数组、字符串等基础知识。 2. **面向对象**:讲解类、对象、封装、继承、多态等核心概念,以及构造函数、...

    java笔记整理,java课堂笔记

    全套java笔记整理,侧边栏目录结构方便查看,纯手工整理。达内笔记整理。 已整理成带侧边栏目录的网页结构,方便复习大纲和跳转查看。大部分都带有笔记代码。 (默认设置为深珊瑚蓝色调,不喜欢可以把配置文件里的...

    java笔记java笔试题 java面试题

    这份"java笔记java笔试题 java面试题"的资源无疑是准备Java程序员的笔试和面试时的重要参考资料。以下是一些关键的Java知识点,这些内容可能会在笔记或面试中出现: 1. **Java基础**:Java的基础语法包括数据类型...

    java超强笔记

    "Java超强笔记"正是一份专为新手准备的学习资源,它全面涵盖了从Java环境的搭建到软件设计的各种概念,旨在提供一个易读且系统的学习路径。 首先,笔记可能会从Java的起源和发展开始介绍,让你了解这门语言的历史...

    韩顺平编写的java学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    java笔记本

    java笔记java笔记java笔记java笔记java笔记java笔记java笔记java笔记

    Java基础 学习笔记 Markdownr版

    6. 反射与动态代理:17反射与动态代理.md探讨了Java的反射机制,允许在运行时获取类的信息并操作对象。动态代理则提供了一种在运行时创建代理对象的能力,常用于实现AOP(面向切面编程)。 通过阅读和理解这些笔记...

    java学习笔记 传智博客java笔记

    详细的描述了java的基本知识,配合看java视频更好了。 笔记中有集合,泛型,线程,的详细案例,还有java.net的资料

Global site tag (gtag.js) - Google Analytics