总结内容

1. IO流是什么

IO流也叫输入输出流
输入流:将数据以字符或字节的方式从外部的存储空间读取到程序中,例如把音频、文档、视频等读取到内存中,所以IO输入流也分为输入字节流和输入字符流;
输出流:将数据以字符或字节的方式从程序中写出到外部磁盘中,IO输出流分为输出字节流和输出字符流。

2. 字符流和字节流

  • IO流按数据格式划分,可分为字符流和字节流
    1)字节流:可用操作任意数据,因为计算机中任何数据都是以字节流的形式处理的,一般用户用字节流处理视屏、音频、图片等,字节流处理纯文本比较慢;
    2)字符流:字符流操作纯文本的数据比较方便。

  • 字节流和字符流的区别
    1)字节流:在操作时本身不会用到缓冲区(内存),是文件本身直接操作的;
    2)字符流:在操作时使用了缓冲区,通过缓冲区再操作文件。

  • 缓冲区的概念
    某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低;
    为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。

3. File常用API(前面类型为返回类型)

  • 判断
    1)boolean exists():判断文件是否存在
    2)boolean isFile() :是否是文件
    3)boolean isDirectory():判断是否是目录
  • 获取
    1)String getName():获取文件名称
    2)String getPath():获取文件路径
    3)String getAbsolutePath():获取绝对路径
    4)File getParentFile():获取上级目录文件
  • 创建删除
    1)boolean delete() :删除文件
    2)boolean mkdirs():创建当前目录和上级目录
  • 列表
    1)File[] listFiles() :列出所有文件对象

4. 编码转换

  • 常见的字符集
    ASCII:占一个字节,只能包含128个符号。不能表示汉字
    ISO-8859-1:也称之为latin-1,占一个字节,收录西欧语言,不能表示汉字
    GB2312/GBK/GB18030:占两个字节,支持中文
    UTF-8:是一种针对Unicode的可变长度字符编码,是Unicode的实现方式之一,支持中文,存储中文占3个字节(推荐使用)

  • 字符串转换:
    数据在网络上传输是以二进制的格式,二进制格式就是byte数组,此时需要把信息做编码和解码处理
    1)编码:把字符串转换为byte数组 String—>byte[]
    2)解码:把byte数组转换为字符串 byte[]—>String
    代码如下:

String aname = request.getParameter("name");
String name = new String(aname.getBytes("ISO-8859-1"),"UTF-8");

5. IO流实现流程

  • 1):创建源或者目标对象
    输入操作: 把文件中的数据流向到程序中,此时文件是源,程序是目标.
    输出操作: 把程序中的数据流向到文件中,此时文件是目标,程序是源.

  • 2):创建IO流对象:
    输入操作: 创建输入流对象.
    输出操作: 创建输出流对象.

  • 3):具体的IO操作.
    输入操作: 输入流对象的read方法.
    输出操作: 输出流对象的write方法.

  • 4):关闭资源(勿忘). 一旦资源关闭之后,就不能使用流对象了,否则报错.
    输入操作: 输入流对象.close();
    输出操作: 输出流对象.close();

  • 注意:
    1)四大抽象流是不能创建对象的,一般的我们根据不同的需求创建他们不同的子类对象,比如操作文件时就使用文件流。
    2)不管是什么流,操作完毕都必须调用close方法,释放资源。

6. 输入输出流简单实现

具体例子代码请看我下篇博文:这是博文链接

7. 输入输出流简单实现

  • close () : 关闭资源/释放资源。
    1)当我们new一个java流对象后,会产生实例对象,当没有引用指向的时候java垃圾收集器会按照相应的策略自动回收,但是却无法对系统资源进行释放。
    2)包装的流都会自动调用 被包装 的流的关闭方法,无需自己调用。
    3)后开启,先关闭。
    4)在关闭字符流时会强制性地将缓冲区中的内容进行输出。
  • flush (): 清空缓冲区数据,将数据强制写出
    1)读完数据 不代表 写完数据。如果直接close() 可能会导致部分数据丢失,所以关闭流前先flush()。
    **注:**如果程序没有flush() 或 close(),则缓冲区中的内容是无法输出的。

总结

以上就是对IO流第一天学习的总结了,代码仅供参考,欢迎讨论交流。

最新文章

  1. SpringMVC(四) RequestMapping请求方式
  2. 高德地图JavaScript开发
  3. WPF中文字体问题
  4. 搭建SpringMVC+Mybatis框架并实现数据库的操作
  5. Spring管理bean的生命周期
  6. Java跟C.C++相互调用
  7. jquery.tmpl.min.js--前端实现模版--数据绑定--详解
  8. cocos2dx shader
  9. winform程序中Label自动换行
  10. Redis数据结构
  11. HDU 3832 Earth Hour(最短路)
  12. URL的# (转)
  13. 如何定制 Calico 网络 Policy - 每天5分钟玩转 Docker 容器技术(70)
  14. C#访问C++动态分配的数组指针
  15. ISAPI和CGI限制中没有ASP.NET v4.0
  16. Android简易实战教程--第三十三话《 AsyncTask异步倒计时》
  17. __x__(42)0910第六天__表格布局 老旧的布局方法
  18. selenium测瀑布流UI页面的Python代码
  19. 当activity改变时,我们如何处理它
  20. [Learn AF3]第六章 App Framework 3.0中的内置矢量图标

热门文章

  1. jq 简易购物车功能实现
  2. Goland 时间转换的那些事
  3. 把EI科技 【载谈 Binomial Sum】 用人话说出来
  4. Using Beyond Compare with TFS
  5. Linux三剑客命令使用(持续更新)
  6. ssh中pam模块造成认证失败
  7. UIautomatorviewer连接设备报错Unexpected error while obtaining UI hierarchy
  8. HT4936S锂电池充放电芯片,充电宝芯片
  9. @Controller 注解?
  10. 如何监控 Elasticsearch 集群状态?