IO流的本质

本地设备和不同设备之间数据的传输

IO流的分类

按照数据类型分类

字节流: 一般针对二进制文件 【视频,音频,图片】

字符流: 一般针对文本文件 【xml,json,html,txt.md...】

按照流向分

输入流: 从外界到内存

输出流: 从内存到外界

综合分类

字节流

字节输入流 InputStream

字节输出流 OutputStream

字符流

字符输入流 Reader

字符输出流 Writer

流的操作的三要素:

1.数据源: 数据需要从哪里到内存?

2.目的地: 数据从内存到哪里去?

3.交通工具:

a.弄明白到底需要输入流还是输出流,也有可能两个都需要

b.根据确定的流向在IO流框架中选取自己认为最适合的流

编码: 字符/字符数组/字符串 --> 二进制

解码: 二进制 --> 字符/字符数组/字符串

编码表: 将字符转换成对应数字的一张对照表

编码处理

编码的处理:

1.字符

2.字符串

getBytes("UTF-8");

new String(bys, "UTF-8")

3.文本文件 流

OutputStreamWriter(转换流,是字符流通向字节流的桥梁,可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认字符集编码。) 构造方法

OutputStreamWriter(OutputStream out) 创建使用默认字符编码的字符输出转换流 OutputStreamWriter(OutputStream out, Charset cs) 创建使用cs字符集的字符输出转换流 OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用enc字符集编码器的

OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的

IO流框架

IO流框架总结

普通IO / NIO

字节流

字节流

字节流是万能流,但是在处理字符方面有时候不太方便,一般用来处理二进制文件

字节输入流

--InputStream

int available() 返回流中可用的字节数

void close() 关闭此输出流并释放与此流有关的所有系统资源。

int read() 读取一个字节

int read(byte[] b) 读取一个字节数组

int read(byte[] b, int off, int len) 读取字节数组的一部分

long skip(long n) 跳过多n个字节读取

--FileInputStream

FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。 FileInputStream(FileDescriptor fdObj) 通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。 FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

-- BufferedInputStream 能够提高读写效率

注意: 1.作为输出流,文件可以不存在,会自动创建,作为输入流,文件必须存在 2.处理中文的时候不方便

字节输出流

--OutputStream

void close() 关闭此输出流并释放与此流有关的所有系统资源。 void flush() 将数据从内存中刷新到文件系统中 void write(byte[] b) 写一个字节数组 void write(byte[] b, int off, int len) 写一个字节数组的一部分 abstract void write(int b) 写一个字节 1.针对字节流可以不使用flush,针对字符流必须flush,建议都要flush 2.close释放流的资源,同时自带flush

--FileOutputStream FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

FileOutputStream(FileDescriptor fdObj) 创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。 FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。

FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。

--BufferedOutputStream 能够提高读写效率

注意: 在不同的操作系统中对换行符的支持不一样 Windows rn Linux n Mac r 1.字节流在处理换行符的方面不方便 2.带append参数的表示追加写入

字符流

字符流

字符输入流

Reader

...方法与字节输入流一致

转换流: InputStreamReader

1.处理编码

2.将字节流转化成字符流

FileReader是InputStreamReader子类,用来读取字符文件的便捷类

高效缓冲字符输入流 BufferedReader

readLine() 读取一行

字符输出流

Writer

...方法与字节输出流一致

转换流: OutputStreamWriter

1.处理编码

2.将字节流转化成字符流

FileWriter是OutputStreamWriter子类,用来写入字符文件的便捷类

高效缓冲字符输出流 BufferedWriter

newLine() 写一个换行符

文件拷贝方式

文件拷贝的方式和原理:

1.FileInputStream/FileOutputStream一次性读取一个字节

2.FileInputStream/FileOutputStream一次性读取一个字节数组

3.BufferedInputStream/BufferedOutputStream一次性读取一个字节

4.BufferedInputStream/BufferedOutputStream一次性读取一个字节数组

5.FileReader/FileWriter一次性读取一个字符

6.FileReader/FileWriter一次性读取一个字符数组

7.BufferedReader/BufferedWriter一次性读取一个字符

8.BufferedReader/BufferedWriter一次性读取一个字符数组

9.BufferedReader/BufferedWriter一次性读取一行

至少有九种方式拷贝文件

使用字节流实现文件拷贝

通过这里我们需要了解计算机是如何处理中文的?

首先读取一个字节,如果人为没有转换

那么系统会根据当前的编码表来处理中文 [中文的第一个数一般是负数]

如果是正数,直接转换成对应码表的字符

如果是负数

判断编码表,假设是GBK,会等待下一个字节一起转换成对应的字符

如果是UTF-8,就会等待下两个字节一起转换成对应的字符

乱码原因:

1.人为转换

2.服务器和客户端编码表不一致

3.服务器系统编码和人为编码不一致

4.URL编码和人为解码不一致

异常 java.io.FileNotFoundException 产生原因: 1.文件盘符不存在 2.文件路径父目录不存在

java.io.IOException: Stream Closed 产生原因: 1.文件流已经关闭还在继续使用

javaio流_Java IO流相关推荐

  1. JAVA mac系统io文件流_Java IO流基础1--IO的分类体系与文件流

    什么是IO流 Java中的IO 了解什么是IO流之前,要先知道什么是IO.IO,就是in和out(即输入和输出),指应用程序和外部设备之间的数据传递,常见的外部设备包括文件.管道.网络连接等. 流的概 ...

  2. java关闭io流_Java IO流关闭问题的深入研究

    前言 前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 1.包装流的close方法是否会自动关闭被包装的流? 答:会. 2.关闭流方法是否有顺 ...

  3. java io字符流_Java IO流字符流简介及基本使用

    Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...

  4. java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流

    一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...

  5. java 文件转换成流_java -IO流_转换流

    转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStre ...

  6. java-IO流(1)-IO流和File类的介绍

    目录 1 IO流的概念 2 IO流体系结构 3Java中流的分 3.1按流向分 3.2按数据传输单位分 3.3按功能分 4File类介绍 4.1File类的作用 4.2常见的构造函数 4.3提供方法 ...

  7. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

  8. java基础学习_IO流03_字符流、IO流小结、案例_day21总结

    java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...

  9. 基于java洗浴中心管理系统_Java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  10. java中io流案例_Java IO流的简单使用 通俗易懂 超详细 【内含案例】

    IO流简单使用 输入和输出是相对于程序来说的,读取到程序中叫做输入,写到文件中叫输出. InputStream 字节输入流 InputStream 字节输入流基类,是字节输入流所有类的超类 // 从输 ...

最新文章

  1. 用secureCRT操作ubuntu终端
  2. webdriver(python)学习笔记一
  3. apache在win2003下的安全设置
  4. 【算法】Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现
  5. EasyTrack项目管理软件的四大版本和相关组件介绍
  6. java方法的参数类型_Java 基础 14 方法的重载 与 方法参数类型详解
  7. Standard C Episode 1
  8. 02--Tomcat总体结构分析一
  9. 程序的内存分配和管理
  10. 此图片来自微信公众平台未经允许不可引用 解决方法
  11. 【人脸表情识别】基于matlab GUI稀疏表示人脸表情识别【含Matlab源码 786期】
  12. 【转】优秀的Java程序员必须了解GC的工作原理
  13. 高等数学:对向量及其线性运算和数量积、向量积的见解
  14. 与 WordPress 的美妙相遇
  15. .loc 与.iloc
  16. 给视频加字幕用什么软件简单?分享3个简单好用的软件
  17. 电路板上为何要有孔洞?何谓PTH/NPTH/vias(导通孔)
  18. 【纯音的世界】系列---【静音吧】爱.请给我时间.
  19. Mycat生产实践---性能调优
  20. lms算法的verilog实现_STM32 LMS算法

热门文章

  1. 四大门户金融业务接连中招,流量这把钥匙正被氧化
  2. 轻松掌握namedtuple
  3. win、linux下tomcat内存的修改
  4. 鹰眼跟踪、限流降级,EDAS的微服务解决之道
  5. MVC3升级到MVC4模型验证信息显示为英文问题及解决方案
  6. windows 2003 上Lotus Notes 客户端无法运行的解决办法
  7. 产品设计体会(2002)产品设计的五个层次
  8. 怎么把ui放入到java工程中_怎么把ui放入到java工程中
  9. php和mysql的概述_MySQL_理解MySQL变量和条件,一、概述  变量在存 - phpStudy
  10. php loadclass,Laravel如何实现自动加载类