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流结束语


目录
相关文章
|
7天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
23 2
|
29天前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
60 2
|
13天前
|
JSON BI API
商城上货API接口的实战案例
在商城上货过程中,API接口扮演着至关重要的角色。以下是对商城上货API接口的实战分析,涵盖其主要功能、类型、安全性以及实战案例等方面。
|
10天前
|
XML 数据可视化 API
商品详情数据实战案例,API接口系列
淘宝商品详情数据在电商领域具有广泛的应用价值,而淘宝商品详情API接口则为开发者提供了获取这些数据的重要途径。通过合理利用这些接口和数据,可以提升业务效率、优化用户体验,为电商行业的发展注入新的活力。
|
14天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
40 4
|
1月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
15天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
31 1
|
20天前
|
存储 JSON API
淘宝API接口实战:高效获取商品标题、分类及店铺名称
在淘宝API接口实战中,通过以下步骤高效获取商品标题、分类及店铺名称:1. 准备工作:了解淘宝开放平台文档,注册开发者账号,选择开发语言和工具。2. 获取API访问权限:申请相应权限,提供应用场景说明。3. 调用API接口:构建HTTP请求,提供必要参数。4. 解析响应数据:提取JSON数据中的所需信息。5. 数据处理和存储:进一步处理并存储数据。6. 注意事项:遵守使用规范,注意调用频率和数据安全。示例代码使用Python调用淘宝API。
|
20天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
39 1
|
22天前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。