@

总结内容

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流第一天学习的总结了,代码仅供参考,欢迎讨论交流。

IO流入门的更多相关文章

  1. Java中的IO流 - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的IO流-入门篇>,希望对大家有帮助,谢谢 由于Java的IO类有很多,这就导致我刚开始学的时候,感觉很乱,每次用到都是上网搜,结果 ...

  2. java IO文件操作简单基础入门例子,IO流其实没那么难

    IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...

  3. Java入门之File类和IO流

    1.File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作 . 构造方法: public File(String pathname) :通过将 ...

  4. RandomAccessFile&IO流&排序&方法论

    RandomAccessFile&IO流&排序&方法论 我们总觉得历史是极其遥远的东西,与我们并无关联,又觉得历史隐藏在图书馆的旧书之中. 然而,我们每个人都有真真切切的历史. ...

  5. Java基础IO流(一)

    IO概念: 大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等.在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象 ...

  6. Java IO 流总结篇

    1. 写在前面的话 I/O ,I 是 Input (输入)的缩写,O是Output (输出) 的缩写,众所周知,人与人之间想要沟通交流,就需要讲彼此都能听懂的语言,比如大家都统一说英语. 人类如果想和 ...

  7. I-O流概念认知升级

    在文件操作基础入门中,我们提到了流的 概念,这篇我们将更多的介绍流这个东西,以及C的I/O相关知识 现在,我们从C程序员最熟悉的printf函数开始学习I/O流. 我们对printf函数一直是很喜爱的 ...

  8. JavaSE复习(四)File类与IO流

    File类 构造方法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例. public File(String parent ...

  9. 史上最骚最全最详细的IO流教程,没有之一!

    目录 1.告白IO流的四点明确 2.File类 1.1 File概述 1.2 构造方法 1.3 常用方法 1.3.1 获取功能的方法 1.3.2 绝对路径和相对路径 1.3.3判断功能的方法 1.3. ...

随机推荐

  1. tip多文件上传(自找)

    HTMl代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  2. 构建 Go 应用 docker 镜像的十八种姿势

    修炼背景 我夜以继日,加班加点开发了一个最简单的 Go Hello world 应用,虽然只是跑了打印一下就退出了,但是老板也要求我上线这个我能写出的唯一应用. 项目结构如下: . ├── go.mo ...

  3. Linux-timedatectl使用

    Linux下使用timedatectl命令时间时区操作详解 timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系 ...

  4. 老徐和阿珍的故事:Runnable和Callable有什么不同?

    人物背景: 老徐,男,本名徐福贵,从事Java相关研发工作多年,职场老油条,摸鱼小能手,虽然岁数不大但长的比较着急,人称老徐.据说之前炒某币败光了所有家产,甚至现在还有欠债. 阿珍,女,本名陈家珍,刚 ...

  5. Java基础(中)

    面向对象基础 面向对象和面向过程的区别 两者的主要区别在于解决问题的方式不同: 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题. 面向对象会先抽象出对象,然后用对象执行方法的方式 ...

  6. Dubbo 配置文件是如何加载到 Spring 中的?

    Spring 容器在启动的时候,会读取到 Spring 默认的一些 schema 以及 Dubbo 自 定义的 schema,每个 schema 都会对应一个自己的 NamespaceHandler, ...

  7. 如何在 Spring Boot 中禁用 Actuator 端点安全性?

    默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们.安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的. ...

  8. 深入理解Java虚拟机-内存分配与回收策略

    一.内存分配策略 新生代中98%的对象都是"朝生夕死"的,所以并不需要按照1:1的比例来划分内存空间,而是将内存(新生代内存)分为一块较大的Eden(伊甸园)空间和两块较小的Sur ...

  9. 在并发情况下,Elasticsearch 如果保证读写一致?

    1.可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用 层来处理具体的冲突: 2.另外对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只 有当大多数 ...

  10. 在多线程环境下,SimpleDateFormat 是线程安全的吗?

    不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是 线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中 使用,如 将 SimpleDa ...