[Day23]IO(字节流、字符流)
1.字节流
1.1 字节输出流OutputStream-抽象类,表示输出字节流的所有类的超类
(1)void close() 关闭此输出流并释放与此流相关的所有系统资源
(2)void flush() 刷新此输出流并强制写出所有缓冲的输出字节
(3)void write(byte[] b) 将b.length个字节从指定的byte数组写入此输出流
(4)write wirte(byte[] b,int off,int len) 将指定byte数组从偏移量off开始的len个字节写入此输出流
(5)abstract void write(int b) 将指定的字节写入此输出流
1.2 FileOutputStream类
(1)是OutputStream的子类,可以用来写入数据到文件,用于将数据写入File的输出流
(2)构造方法
FileOutputStream(File file) 创建一个向指定File对象表示的文件中写入数据的文件输出流
FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流
(3)续写和换行-构造函数中可以接受一个boolean类型的值,如果值为true,就会在文件末位继续添加
FileOutputStream(File file,boolean append) 创建一个向指定File对象表示的文件中写入数据的文件输出流
FileOutputStream(String name,boolean append) 创建一个向具有指定name的文件中写入数据的输出文件流
通过在上一行末位或下一行开头加入\r\n实现换行
(4)IO异常处理
可以直接throws,或者用try...catch...finally
1.3 字节输入流InputStream-抽象类,是表示字节输入流的所有类的超类
(1)abstract int read() 从输入流中读取数据的下一个字节,读取并返回,没有字节则返回-1
(2)int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中,返回读取到的字节数
1.4 FileInputStream类-InputStream类的子类,可以用来读取文件内容,从文件系统中的某个文件中获得输入字节
(1)构造方法
FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定
FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统的路径名name指定
(2)读取数据方法
abstract int read() 从输入流中读取数据的下一个字节
int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
1.5 字节流-文件复制
(1)原理:读取一个已有的数据,并将这些读到的数据写入到另一个文件中
(2)步骤:a.明确源和目的
b.明确字节流、输入流和源相关联,输出流和目的关联
c.使用输入流的读取方法读取字节,并将字节写入到目的文件中
d.关闭资源
2.字符流
2.1 字符编码表
(1)ASCII:一个字节中的7位就可以表示,对应的字节都是正数 0-xxxxxxx
(2)ISO-8859-1:拉丁码表latin,一个字节用的8位 1-xxxxxxx 负数
(3)GB2312:简体中文码表,包含6000-7000中文和符号,用两个字节表示,其中的一部分是文字,第一个字节是负数,第二个字节可能是正数
GBK:目前最常用的中文码表,2万的中文和符号。用两个字节表示。其中的一部分是文字,第一个字节开头是1,第二个字节开头是0
GB18030:最新的中文码表,目前还未正式使用
(4)UNICODE:国际标准码表,无论什么文字,都用两个字节存储
Java中的char类型用的就是这个码表,char c='a',占两个字节
Java中的字符串是按照系统默认码表来解析,简体中文版字符串默认的码表是GBK
(5)UTF-8:基于unicode,一个字节就可以存储数据,不要用两个字节存储,而且这个码表更加的标准化,在每一个字节头加入了编码信息
(6)能识别中文的码表:GBK、UTF-8;正因为识别中文码表不唯一,涉及到了编码解码问题。
常见的编码 GBK UTF-8 ISO-8859-1
文字--->(数字) :编码。 “abc”.getBytes() byte[]
(数字)--->文字 : 解码。 byte[] b={97,98,99} new String(b)
2.2 字符输入流Reader-读取字符流的抽象类
(1)int read() 读取单个字符
(2)int read(char[] cbuf) 将字符读入数组
2.3 FileReader类
(1)FileInputStream用于读取诸如图像数据之类的原始字节流,要读取字符流,需要使用FileReader
(2)构造方法
FileReader(File file) 在给定从中读取数据的File的情况下创建一个新FileReader
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新FileReader
2.4 字符输出流Writer-写入字符流的抽象类
(1)void write(char[] cbuf) 写入字符数组
(2)abstract void write(char[] cbuf,int off,int len) 写入字符数组的某一部分
(3)void write(int c) 写入单个字符
(4)void write(String str) 写入字符串
(5)void write(String str,int off,int len) 写入字符串的某一部分
2.5 FileWriter类
(1)FileWriter(File file) 根据给定的File对象构造一个FileWriter对象
(2)FileWriter(File file,boolean append) 根据给定的File对象构造一个FileWriter对象
(3)FileWriter(String fileName) 根据给定的文件名构造一个FileWriter对象
(4)FileWriter(String fileName,boolean append) 根据给定的文件名以及指示是否附加写入数据的boolean值来构造FileWriter对象
2.6 flush()和close()区别
(1)flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。
(2)close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。
[Day23]IO(字节流、字符流)的更多相关文章
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- IO流(字节流,字符流,缓冲流)
一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流 这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图: 二:字符字节 ...
- IO之字符流
什么是字符流 对于文本文件(.txt .java .c .cpp) 使用字符流处理 注意点 读入的文件一定要存在 否则就会报FileNotFoundException 异常的处理 为了保证流资源 一定 ...
- Java IO: 其他字符流(下)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...
- IO 复习字节流字符流拷贝文件
/* 本地文件 URL 文件拷贝 *//*文本文件拷贝 可以通过 字符流,也可以通过字节流*/ /*二进制文件拷贝 只可以通过字节流*//* 希望这个例子能帮助搞懂 字符流与字节流的区别 */ imp ...
- Java之IO流(字节流,字符流)
IO流和Properties IO流 IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键, 因而所有 I/O 的主体实际上是内置在操作系统中的.单独的 ...
- Java IO编程——字符流与字节流
在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...
- IO—》字节流&字符流
字节流 一.字节输出流OutputStream OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节,定义了输出字节流的基本共性功能方法. FileOutputStre ...
- 【C#IO 操作】stream 字节流|字符流 |比特流
stream的简介 Stream 所有流的抽象基类. 流是字节序列的抽象,例如文件.输入/输出设备.进程中通信管道或 TCP/IP 套接字. Stream类及其派生类提供这些不同类型的输入和输出的一般 ...
- java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式
字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...
随机推荐
- 【原创】大数据基础之Mesos+Marathon+Docker部署nginx
一 安装 安装docker:https://www.cnblogs.com/barneywill/p/10343091.html安装mesos:https://www.cnblogs.com/barn ...
- C++入门篇一
双冒号(::)的作用:作用域运算符,全局作用域 void LOL::game1(){//在LOL命名空间下面的game1 cout << "LOL游戏开始" <& ...
- Java的家庭记账本程序(K)
日期:2019.3.10 博客期:043 星期日 呕吼~这里是编程菜鸟小Master,今天加油的把第二个模板套用了,更改了许多的设定,我想这一个程序的网页版也就到这里结束了,下面是一部分的展示图,想要 ...
- TCP报文首段格式
参考:https://www.bilibili.com/video/av9876107?from=search&seid=5217429010533979778 TCP(Transmissio ...
- spring-boot-starter-thymeleaf 避坑指南
第一步:pom配置环境 先不要管包是做什么的 总之必须要有 否则进坑 <!--避坑包--> <dependency> <groupId>net.sourceforg ...
- 传输层的端口与TCP标志中的URG和PSH位
一.协议端口号的提出 运输层提供了进程间通信的能力(即端-端通信).但是不同的操作系统可能无法识别其他机器上的进程.为了用统一的方法对 TCP/IP体系的应用进程进行标志,使运行不同操作系统的计算机的 ...
- thinkphp微信浏览器内拉起微信支付
vendor/wxpay/pay.php <?php /* +-----------------------------------+ | 微信支付类 | +------------------ ...
- cJSON源码分析
JSON (JavaScript Object Notation) 是一种常见使用的轻量级的数据交换格式,既有利于人工读写,也方便于机器的解析和生成. 关于JSON格式的定义,参看网站[1].在该网站 ...
- 使用Spring ThreadPoolTaskExecutor实现多线程任务
我们为何使用多线程,之前已经有讲过了,为了更快的处理多个任务,分割任务,或者调用多个毫无关联的第三方服务 其实spring就提供了ThreadPoolTaskExecutor这个类来实现线程池,线程池 ...
- PyCharm使用秘籍
PyCharm的基本使用 在PyCharm下为你的Python项目配置Python解释器 Project:当前项目名>Project Interpreter>add Local 在PyCh ...