5:IO Stream-Java API 实战

简介: 5:IO Stream-Java API 实战

1. 相对论和IO流之说


Input/Output Stream


  • 词典中Stream的意思是有方向性的流动的液体/电流,强调过程


  • 理解I/O Stream可以看作是输入/输出方向的流体



从相对论的角度看待 I/O流


  • 冬天旱季的时候,支流把水输出到长江中,长江输入这些水


  • 夏季雨季的时候,支流转换角色输入这些水,而长江输出这些水


  • 流必须要有管道,流动一定会有输出口和输入口,而谁输出、谁输入要看你选定的参照系



2. 汉语文学理解IO流


  • 解释流这个词,像水流的东西输入/输出


  • 有一个物体会流动,像水一样,有输入和输出两种方式或者两种方向



3. 图解IO流


I/O Stream 文档中的两幅图


详见:I/O Streams (The Java™ Tutorials > Essential Java Classes …



Reading information into a program 读数据,数据源数据流到了程序中,对于程序是input,对于数据源是output,是程序在读取数据源中的数据



Writing information from a program 写数据,程序数据流到了数据源中,对于程序是output,对于数据源是input,是程序在往数据源中写数据


上面两种方式都是站在程序的角度上对数据源的操作,参照物是程序,因为我们操纵的就是程序


4. 俩亲爹:InputStream和OutPutStream


终极静态父类


  • I/O流就是用来管理各种数据的输入和输出,在这个包中有两个终极静态父类,InputStreamOutputStream


  • 这两个类提供和数据操作相关的方法,后有其他不同类型的数据控制子类来继承这两个类


InputStream专门管理数据的读相关操作



OutputStream专门管理数据的写相关操作



5. FileInputStream字节流读取文件


参考:java基础知识之FileInputStream流


文件读取流,创建一个file文件夹,将其作为Resources Root目录



file文件夹下创建1.txt文件,随便写入一点东西,.read()方法是按照字节的二进制形式一个一个读取的,如果不想看到ASCII码,就需要将它转换成(char)类型,在代码的末尾要加上.close() 关闭程序



6. FileOutPutStream字节流写入文件


文件输出流,创建2.txt空文件,.write()方法读取整个字节数组,不需要使用for循环也能全部写入文件




7. buff缓冲复制文件


引出缓冲概念


  • 文件流的读取是一个一个字节读的,写也是一个一个字节写,是否可以将读文件的字节传输到写文件的字节流里面,相当于完成文件的复制呢?


  • buff就相当于缓冲,搬箱输入与输出,复制文件就不需要一个字节一个字节传了



8. buffered字节缓冲流、装饰设计模式


引出缓冲区


  • 在原来的读写文件中按单个字节的方式速度很慢,加了缓冲区以后,一次性读1024个字节,这样就会更快


  • Buffer 类是 java.nio 的构造基础,一个 Buffer 对象是固定数量的数据的容器,其作用是一个存储器或者分段运输区,数据可被存储并在之后用于检索


BufferInputStream源码中这是缓冲输入流一次性读取8192个字节流



装饰模式


  • 又名包装(Wrapper)模式。装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案


以复制文件函数为例,在这里不能直接将path路径传入到BufferedInputStream,而是使用了文件输入输出流创建的对象。BufferedInputStream中接收的是对象而不是字符串,这就叫装饰设计模式



9. FileReader和FileWriter,俩专门来搞定txt文件


  • FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据


  • FileWriter 类从OutputStreamWriter 类继承而来。该类按字符向流中写入数据


这两种流非常适合用来读取文本文件一类的文件,不需要再设置字节数组来进行读取,在写文件的时候也不需要获取字符串的字节流



10. BufferedReader、BufferedWriter


BufferedReader可以直接读取一行的信息



BufferedWriter也非常简单,但要注意把流关闭,特别是写文件的时候,如果没关,写出来的文件中不会有内容显示



11. 一次性讲解剩余的N个流(扩展课)Java里那些极其骚的IO流


各种流的体验


12. Apache Common IO


Apache Commons IO是对java.io的扩展,其对IO封装了一些好用的工具类,只需要少量的代码就能完成大量的IO操作


Apache Common IO下载详见:Apache Commons IO



例如要写入数据,只需一行代码就能搞定了,其它相关方法可以自行学习



13. IO流结束语


目录
相关文章
|
4天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1天前
|
安全 API 数据安全/隐私保护
速卖通AliExpress商品详情API接口深度解析与实战应用
速卖通(AliExpress)作为全球化电商的重要平台,提供了丰富的商品资源和便捷的购物体验。为了提升用户体验和优化商品管理,速卖通开放了API接口,其中商品详情API尤为关键。本文介绍如何获取API密钥、调用商品详情API接口,并处理API响应数据,帮助开发者和商家高效利用这些工具。通过合理规划API调用策略和确保合法合规使用,开发者可以更好地获取商品信息,优化管理和营销策略。
|
8天前
|
Java
Java基础却常被忽略:全面讲解this的实战技巧!
本次分享来自于一道Java基础的面试试题,对this的各种妙用进行了深度讲解,并分析了一些关于this的常见面试陷阱,主要包括以下几方面内容: 1.什么是this 2.this的场景化使用案例 3.关于this的误区 4.总结与练习
|
18天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
52 10
|
26天前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
44 6
|
24天前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
26 1
|
26天前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
1月前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
58 6
|
1月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
1月前
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
39 5