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


目录
相关文章
|
2月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
26天前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
27天前
|
缓存 自然语言处理 API
阿里巴巴国际站关键字搜索 API 实战:3 步搞定多语言适配 + 限流破局,询盘量提升 40%
跨境电商API开发常陷合规、多语言、限流等坑。本文详解从国际合规(GDPR/CCPA)到参数优化、数据结构化及区域化搜索的全链路方案,附Python代码模板与缓存重试架构,助力提升调用成功率至99%+,精准询盘增长42%。
|
2月前
|
供应链 监控 安全
1688商品详情API接口实战指南:合规获取数据,驱动B2B业务增长
1688商品详情API(alibaba.product.get)是合规获取B2B商品数据的核心工具,支持全维度信息调用,助力企业实现智能选品、供应链优化与市场洞察,推动数字化转型。
|
1月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
227 119
|
2月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
227 100
|
2月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
258 101
|
1月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
2月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
1月前
|
开发者 API 机器学习/深度学习
淘宝 / 1688 / 义乌购图搜 API 实战指南:接口调用与商业场景应用
本文详解淘宝、1688、义乌购三大平台图片搜索接口的核心特点、调用流程与实战代码。涵盖跨平台对比、参数配置、响应解析及避坑指南,支持URL/Base64上传,返回商品ID、价格、销量等关键信息,助力开发者快速实现商品识别与比价功能。
淘宝 / 1688 / 义乌购图搜 API 实战指南:接口调用与商业场景应用