Java精选笔记_IO流(转换流、常用流、流操作规律、字符编码)
IO流
用来处理设备之间的数据传输,java对数据的操作是通过流的方式,java用于操作流的对象都在IO包中
按操作数据分为:字节流和字符流;按流向分为:输入流和输出流。
程序从输入流中读取数据,向输出流中写入数据。
字节流的抽象基类:Inputstream 和 OutputStream;字符流的抽象基类:Reader 和 Writer
其他流均是继承这4个抽象类而来的。
转换流
转换流也是一种包装流,其中OutputStreamWriter是Writer的子类,可以将一个字节流输出流包装成字符输出流,方便直接写入字符,而InputStreamReader是Reader的子类,它可以将一个字节输入流包装成字符输入流,方便直接读取字符。
InputStreamReader读取转换流--------字节流通向字符流的桥梁
步骤 :
1.获取键盘录入对象
Inputstream in=System.in
2.将字节流对象转换成字符流对象,使用转换流InputStreamReader
InputStreamReader isr=new InputStreamReader(in);
3.提高效率使用字符流缓冲区 BufferedReader进行读取
BufferedReader bf=new BufferedReader(isr);
String line=null;
while((line=bf.readLine())!=null) {
if("over".equals(line))
break;
sop(line);
}
bufr.close;
OutputStreamReader写入转换流----------字符流通向字节流的桥梁
步骤 :
1.获取输出对象
Outputstream out=System.out
2.将字符流对象转换成字节流对象,使用转换流OutputstreamWriter
OutputstreamWriter osw=new OutputstreamWriter(out);
3.提高效率使用字符流缓冲区 BufferedWriter进行写入
BufferedWriter bw=new BufferedWriter(osw);
String line=null;
while((line=bf.readLine())!=null) {
if("over".equals(line))
break;
bw.write(line);
bufw.newLine();
}
bufr.close;
常用流
字节流
InputStream
int read()
int read(byte[])
int read(byte[], int, int)
FileInputStream
AudioInputStream
ByteArrayInputStream
ObjectInputStream
PipedInputStream
int available()
void close()
OutputStream
write(int)
write(byte[])
write(byte[], int, int)
FileOutputStream
ByteArrayOutputStream
ObjectOutputStream
PipedOutputStream
flush()
close()
字符流
Reader
FileReader节点流
BufferedReader过滤流(处理流)
InputStreamReader转换流
Writer
FileWriter节点流
BufferedWriter过滤流(处理流)
OutputStreamWriter转换流
读取键盘录入
System.out:对应的是标准输出设备,控制台
System.in:对应的标准输入设备,键盘
InputStream in=System.in;
int by=in.read();
sop(by);
in.close(); //结束录入
流操作规律
基本规律
1.明确源和目的
源:输入流。InputStream字节流 Reader 字符流
目的:输出流 OutPutStream 字节流 Writer 字符流
2.操作的数据是否是纯文本
是就是字符流,如果设备是键盘 就将字节流转换为字符流
不是就是字节流
3.当体系明确后,在明确要是用那个具体的对象
通过设备来区分:
源设备 内存 硬盘 键盘
目的设备 内存 硬盘 控制台
4.是否需要提高效率
是 BufferedReader BufferedInputStream
否 BuffreredWriter BufferedOutputStream
案例分析
1.将一个文本文件中的数据存储到另一个文件中,复制文件
源:InputStream字节流 Reader 字符流
是否是纯文本 是 Reader
设备: 文件 操作文件的对象 就是FileReader
是否需要高效
是 BufferedReader
FileReader fr=new FileReader("a.txt");
BufferedReader bufr=new BufferedReader(fr);
目的:OutPutStream 字节流 Writer 字符流
是否是纯文本 :是 Writer
设备: 文件 写入文件的对象 就是 FileWriter
是否需要高效 是 BufferedWriter
FileWriter fw=new FileWriter("b.txt");
BufferedWriter bufw=new BufferedWriter(fw);
2.将一个图片文件数据存储到另一个文件中,复制文件。
源:是否是纯文本 : 不是 InputStream
设备 文件 就是 FileInputStream
是否高效 是
BufferedInputStream
FileInputStream isr=new FileInputStream("a.jpg");
BufferedInputStream bufis=new BufferedInputStream(isr);
目的:是否纯文本 :不是 OutPutStream
设备:文件 FileOutPutStream
是否高效 是
BufferedOutputStream
FileOutPutStream osw=new FileOutPutStream("b.jpg");
BufferedOutputStream bufos=new BufferedOutputStream(osw);
3.需求将键盘录入的数据保存到一个文件中 。
源:键盘 字节流
是否纯文本 Reader
设备 :键盘 ,对应的对象时 System.in 对应的是字节流 ,为了操作方便 转成字符流
既然明确了Reader 就将System.in 转换成字符流 InputStreamReader
InputStreamReader isr=new InputStreamReader(System.in);
需要高效吗 ?
BufferedReader bufr=new BufferedReader(isr);
目的: 文件
是否纯文本 是 Writer
设备:文件 FileWriter
需要高效吗?
是 BufferedWriter
4.扩展 :想要把录入的数据按照指定的编码表(utf-8)将数据存到文件中
目的:OutPutStream 字节流 Writer 字符流
是否是存文本:是 Writer
设备 :文件 fileWriter
默认编码表是 gbk
编码标只有转换流可以指定。所以要使用的对象是写入转换流 OutputStreamWriter
转换流需要接受一个自己输出流,操作字节输出流的是FileOutputStream
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("b.txt"),"utf-8");
BufferedWriter bufw=new BufferedWriter (osw);
通常涉及到字符编码转换的时候,就需要用到转换流。
字符编码
字符码表
字符码表是一种可以方便计算机识别的特定字符集,它是将每一个字符和一个唯一的数字对应而形成的一张表。ASCII、ISO8859-1、GB2312、GBK、Unicode、UTF-8
字符编码和解码
把字符串转换成计算机识别的字节序列称为编码
把字节序列转换为普通人能看懂的明文字符串称为解码
字符传输
通过构造方法InputStreamReader(InputStream in,String charsetName)和OutputStreamReader(OutputStream in,String charsetName)创建流对象时,可以对需要读写的数据指定编码格式
两种设计模式
适配器模式
将字节流适配成可以用字符的方式操作的字符流
适配:把不兼容的(接口)变成兼容的(接口)
InputStreamReader
OutuptStreamWriter
装潢模式
处理流(过滤流)基本上都是用了装潢模式
BufferedReader / BufferedWriter
PrintStream / PrintWriter
DataInputStream / DataOutputStream
Java精选笔记_IO流(转换流、常用流、流操作规律、字符编码)的更多相关文章
- Java精选笔记_IO流【File(文件)类、遍历目录下的文件、删除文件及目录】
File(文件)类 File类用于封装一个路径,该路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径 File类内部封装的路径可以指向一个文件,也可以指向一个目录,在使用File ...
- Java精选笔记_IO流(字符输入输出流、字符文件输入输出流、字符流的缓冲区)
字符流 Reader是字符输入流的基类,用于从某个源设备读取字符 Writer是字符输出流,用于向某个目标设备写入字符 字符流操作文件 字符输入流FileReader,通过此流可以从关联的文件中读取一 ...
- Java精选笔记_IO流(字节流、InputStream、OutputStream、字节文件、缓冲区输入输出流)
字节流 操作图片数据就要用到字节流. 字符流使用的是字符数组char[],字节流使用的是字节数组byte[]. 字节流读写文件 针对文件的读写,JDK专门提供了两个类,分别是FileInputStre ...
- JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码
JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...
- Java学习笔记39(转换流)
转换流:字符流和字节流之间的桥梁 用于处理程序的编码问题 OutputStreamWriter类:字符转字节流 写文本文件: package demo; import java.io.FileOutp ...
- Java IO流体系中常用的流分类
Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义) 注:下表中带下划线的是抽象类,不能创建对象.粗体部分是节点流,其他就是常用的处理流. 流分类 使用分类 字节输入流 字节输出流 字 ...
- Java精选笔记_JSP技术
JSP技术 JSP概述 什么是JSP 在JSP全名是Java Server Page,它是建立在Servlet规范之上的动态网页开发技术. 在JSP文件中,HTML代码与Java代码共同存在,其中,H ...
- Java精选笔记_文件上传与下载
文件上传与下载 如何实现文件上传 在Web应用中,由于大多数文件的上传都是通过表单的形式提交给服务器的,因此,要想在程序中实现文件上传的功能,首先得创建一个用于提交上传文件的表单页面. 为了使Serv ...
- Java精选笔记_JSTL(JSP标准标签库)
JSTL(JSP标准标签库) JSTL入门 JavaServer Pages Standard Tag Library:JSP标准标签库 在JSP中可以通过Java代码来获取信息,但是过多的Java代 ...
随机推荐
- C#中模拟用户登陆SharePoint网站
自动化测试一个SharePoint网站,首先要登陆,我们今天就模拟一下用户登陆SharePoint网站的过程,这一过程可以通过其他方式完成模拟,比如通过Coded UI Test录制脚本会更方便,但是 ...
- LocationActivity
package com.baidu.location.demo; import com.baidu.baidulocationdemo.R;import com.baidu.location.BDLo ...
- R ggplot2 线性回归
摘自 http://f.dataguru.cn/thread-278300-1-1.html library(ggplot2) x=1:10y=rnorm(10)a=data.frame(x= x, ...
- 一款效果非常不错的jquery插件 -Lightbox
今天为大家介绍一款非常不错的jquery图片查看插件-Lightbox.这款图片查看插件体验很好,不仅有左右两个小箭头可以浏览上一张和下一张图片,还支持鼠标的左右键浏览上一张和下一张图片.有点类似go ...
- PDNN安装与使用
在之前写的一文"关于PDNN.Theano.Numpy以及Scipy的安装"中介绍了Theano的安装, 下面简单的介绍一下PDNN的安装与使用,哎,这个从学习的角度来讲自己亲自动 ...
- [镜像]镜像操作losetup
安装完之后查看一下版本 /usr/sbin/debootstrap –version转自:http://blog.csdn.net/cnyyx/article/details/27182833 1.挂 ...
- Spring Boot 更换 Banner
Spring 启动时,会有一个Banner图案,这个图案是可以更换的 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ ...
- DVI与DVI-D的区别
DVI-I兼容DVI-D和VGA,如果不使用VGA信号兼容,那么没有任何区别. 1) DVI接口是1999年由数字显示工作组DDWG(Digital Display Working Group)推出的 ...
- javascript中全局变量的定义
首先确实简单,在js脚本的函数外面使用. 但是要注意点: 不能写到jquery的框框代码里面,之前粗心放到$(function(){ })里面去了. <script type="tex ...
- imx6 gpio分析
本文主要介绍如何配置IOMUX寄存器,设置IO复用寄存器,配置为GPIO功能.参考: http://www.jianshu.com/p/3c2053508342 http://www.embest-t ...