javaio流_Java IO流
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流相关推荐
- JAVA mac系统io文件流_Java IO流基础1--IO的分类体系与文件流
什么是IO流 Java中的IO 了解什么是IO流之前,要先知道什么是IO.IO,就是in和out(即输入和输出),指应用程序和外部设备之间的数据传递,常见的外部设备包括文件.管道.网络连接等. 流的概 ...
- java关闭io流_Java IO流关闭问题的深入研究
前言 前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 1.包装流的close方法是否会自动关闭被包装的流? 答:会. 2.关闭流方法是否有顺 ...
- java io字符流_Java IO流字符流简介及基本使用
Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...
- java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...
- java 文件转换成流_java -IO流_转换流
转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStre ...
- java-IO流(1)-IO流和File类的介绍
目录 1 IO流的概念 2 IO流体系结构 3Java中流的分 3.1按流向分 3.2按数据传输单位分 3.3按功能分 4File类介绍 4.1File类的作用 4.2常见的构造函数 4.3提供方法 ...
- 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)
菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...
- java基础学习_IO流03_字符流、IO流小结、案例_day21总结
java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...
- 基于java洗浴中心管理系统_Java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- java中io流案例_Java IO流的简单使用 通俗易懂 超详细 【内含案例】
IO流简单使用 输入和输出是相对于程序来说的,读取到程序中叫做输入,写到文件中叫输出. InputStream 字节输入流 InputStream 字节输入流基类,是字节输入流所有类的超类 // 从输 ...
最新文章
- 用secureCRT操作ubuntu终端
- webdriver(python)学习笔记一
- apache在win2003下的安全设置
- 【算法】Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现
- EasyTrack项目管理软件的四大版本和相关组件介绍
- java方法的参数类型_Java 基础 14 方法的重载 与 方法参数类型详解
- Standard C Episode 1
- 02--Tomcat总体结构分析一
- 程序的内存分配和管理
- 此图片来自微信公众平台未经允许不可引用 解决方法
- 【人脸表情识别】基于matlab GUI稀疏表示人脸表情识别【含Matlab源码 786期】
- 【转】优秀的Java程序员必须了解GC的工作原理
- 高等数学:对向量及其线性运算和数量积、向量积的见解
- 与 WordPress 的美妙相遇
- .loc 与.iloc
- 给视频加字幕用什么软件简单?分享3个简单好用的软件
- 电路板上为何要有孔洞?何谓PTH/NPTH/vias(导通孔)
- 【纯音的世界】系列---【静音吧】爱.请给我时间.
- Mycat生产实践---性能调优
- lms算法的verilog实现_STM32 LMS算法
热门文章
- 四大门户金融业务接连中招,流量这把钥匙正被氧化
- 轻松掌握namedtuple
- win、linux下tomcat内存的修改
- 鹰眼跟踪、限流降级,EDAS的微服务解决之道
- MVC3升级到MVC4模型验证信息显示为英文问题及解决方案
- windows 2003 上Lotus Notes 客户端无法运行的解决办法
- 产品设计体会(2002)产品设计的五个层次
- 怎么把ui放入到java工程中_怎么把ui放入到java工程中
- php和mysql的概述_MySQL_理解MySQL变量和条件,一、概述 变量在存 - phpStudy
- php loadclass,Laravel如何实现自动加载类