总结内容

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. IO流入门-第十三章-File相关

    /* java.io.File 1.File和流无关,不能通过该类完成文件的读写 2.File是文件和目录路径名的抽象变现形式. */ import java.io.*; public class F ...

  2. IO流入门-第十二章-ObjectInputStream_ObjectOutputStream

    DataInputStream和DataOutputStream基本用法和方法示例,序列化和反序列化 import java.io.Serializable; //该接口是一个“可序列化”的 ,没有任 ...

  3. IO流入门-第十一章-PrintStream_PrintWriter

    DataInputStream和DataOutputStream基本用法和方法示例 /* java.io.PrintStream:标准的输出流,默认打印到控制台,以字节方式 java.io.Print ...

  4. IO流入门-第十章-DataInputStream_DataOutputStream

    DataInputStream和DataOutputStream基本用法和方法示例 /* java.io.DataOutputStream 数据字节输出流,带着类型写入 可以将内存中的“int i = ...

  5. IO流入门-第九章-BufferedReader_BufferedWriter复制

    利用BufferedReader和BufferedWriter进行复制粘贴 import java.io.*; public class BufferedReader_BufferedWriterCo ...

  6. IO流入门-第八章-BufferedWriter

    BufferedWriter基本用法和方法示例 import java.io.*; public class BufferedWriterTest01 { public static void mai ...

  7. IO流入门-第七章-BufferedReader

    BufferedReader基本用法和方法示例 /* 字节 BufferedInputStream BufferedOutputStream 字符 BufferedReader:带有缓冲区的字符输入流 ...

  8. IO流入门-第六章-FileReader_FileWriter复制

    利用FileReader和FileWriter进行复制粘贴 /* 文件复制粘贴 只能复制纯文本文件 2017/4/13 */ import java.io.*; public class FileRe ...

  9. IO流入门-第五章-FileWriter

    FileWriter基本用法和方法示例 /* java.io.Writer java.io.OutputStreamWriter 转换流(字节输出流--->字符输出流) java.io.File ...

随机推荐

  1. jmeter + tomcat + ant + svn +jenkins 实现持续集成测试

    l 安装jdk时候需要提前检查jdk是否安装成功 l 在dos下输入javac      java -version l l 安装jmeter l 校验是否安装成功: l 进入jmeter目录下bin ...

  2. springboot-jta-atomikos多数据源事务管理

    背景 我们平时在用springboot开发时,要使用事务,只需要在方法上添加@Transaction注解即可,但这种方式只适用单数据源,在多数据源下就不再适用: 比如在多数据源下,我们在一个方法里执行 ...

  3. Linux命令大全(查看日志)

    1.查看日志常用命令     tail:          -n  是显示行号:相当于nl命令:例子如下:             tail -100f test.log      实时监控100行日 ...

  4. jq集成月份插件(不要年月日,只要年月)

    最近项目中报表统计需要按照月份进行统计,以前用的jq-ui的插件,里面集成的是年月日,修改了好久,觉得太过麻烦,就换了个思路,由于赶时间,所以就度娘了,找到了一个很简洁又简单的Demo,但是发现和我的 ...

  5. Tomcat乱码问题解决

    修改idea编码:setting->Editor->File Encodings: Global Encoding:UTF-8 Project Encoding:UTF-8 Default ...

  6. kubernetes资源使用glusterfs卷进行数据持久化

    1.GlusterFS部署 安装GlusterFS集群的主要目的是为k8s集群提供分布式持久化存储. GlusterFS部署使用2台服务器,服务名称与IP如下: 1 db-storagea 10.1. ...

  7. 查看mysql是否开启慢查询

    说明: slow_query_log 慢查询开启状态 slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) l ...

  8. 5月28日 python学习总结 CSS学习(二)

    CSS属性相关 宽和高 width属性可以为元素设置宽度. height属性可以为元素设置高度. 块级标签才能设置宽度,内联标签的宽度由内容来决定. 字体属性 文字字体 font-family可以把多 ...

  9. badusb

    ​badusb介绍 BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式.HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会 ...

  10. 「入门篇」初识JVM

    记录于 2022-01-02  17:25:12  GhostFace 1. 什么是JVM? 概念 来自百度百科 JVM是 Java Virtual Machine(Java虚拟机)的缩写,JVM是一 ...