Java笔记(二十六)……IO流上 字节流与字符流
概述
IO流用来处理设备之间的数据传输
Java对数据的操作时通过流的方式
Java用于操作流的对象都在IO包中
流按操作的数据分为:字节流和字符流
流按流向不同分为:输入流和输出流
IO流常用基类
字节流的抽象基类
InputStream,OuputStream
字符流的抽象基类
Reader,Writer
注:
这些基类的子类都是以基类的名称结尾的,如FileReader,FileInputStream
字节流
字节流:以字符为导向的流
简单介绍一个例子,演示字节流对图片的复制
1: import java.io.*;
2:
3: class IOCopyPicDemo
4: {
5: public static void main(String[] args) throws IOException
6: {
7: //创建字节文件读取流
8: FileInputStream fis = new FileInputStream("pic1.png");
9: //创建字节文件输入流
10: FileOutputStream fos = new FileOutputStream("pic2.png");
11:
12: //定义缓冲区
13: byte[] buf = new byte[1024];
14:
15: //读取字节到缓冲区,并写入输出流,即写入到文件
16: int len = -1;
17: while( (len = fis.read(buf)) != -1)
18: {
19: fos.write(buf,0,len);
20: }
21:
22: //关闭资源
23: fis.close();
24: fos.close();
25:
26: }
27: }
字符流
字符流:以字符为导向的流
字符流只能操作文本,下面是字符流拷贝文本文件的例子
1: import java.io.*;
2:
3: class IOFileCopyDemo
4: {
5: public static void main(String[] args) throws IOException
6: {
7: //创建字符文件输入流
8: FileReader fr = new FileReader("IODemo1.java");
9:
10: //创建字符文件输出流
11: FileWriter fw = new FileWriter("IODemo2.java");
12:
13: //字符缓冲区
14: char[] data = new char[1024];
15:
16: int len = -1;
17:
18: //读入字符,并写入文件
19: while( (len = fr.read(data)) != -1)
20: {
21: fw.write(data,0,len);
22: }
23:
24: //关闭资源
25: fw.close();
26: fr.close();
27:
28: }
29: }
转换流
InputStreamReader,OutputStreamWriter
InputStreamReader(InputStream in):接收字节流,转换为字符流
InputStreamReader(InputStream in, Charset cs):接收字节流,按照指定的编码表转换为字符流
其实FileReader就是使用系统默认编码表的转换流,其内部使用的也是字节流,因此,下面两句是一样的
FileReader fr = new FileReader(“1.txt”);
InputStreamReader isr = new InputStreamReader(new FileInputStream(“1.txt”),”GDK”);
缓冲区与装饰设计模式
缓冲区
顾名思义,对数据起到一个缓冲的作用,减少了流之间的耦合性,减少了每次与硬盘设备之间的通信,提供了效率
BufferedWriter,BufferedReader,BufferedInputStream,BufferedOutputStream实现了对对应流的缓冲(其实内部就是定义了一个数组,无论读一个数组或者一个字,内部都会事先读取好一个足够大的缓冲区数组,供你使用)
装饰设计模式
当我们对一个体系中的类进行功能加强时,如果对每个类都定义其子类,会使得整个体系显得非常臃肿,而且扩展性不好,没出现一个新类,就要对其创建一个用于功能增强的子类,整个时候就出现了装饰类,这个装饰类就是对一个体系的类都进行功能的加强,使用时传入体系中类的对象,同时这个装饰类又应该属于这个体系
例如:BufferedReader,对Reader体系中的所有类进行加强,加入缓冲技术,方法的接口中使用的是父类引用,利用多态提高了功能扩展性
装饰设计模式的演变过程
IO异常处理方式
IO的异常基类为IOException,是Exception的子类,代表需要被程序员处理
由于IO涉及到了各种资源,所以try处理时,必须要在finally块中进行关闭资源操作
1: /*
2: IO异常处理
3: */
4:
5: import java.io.*;
6:
7: class IOExceptionHandleDemo
8: {
9: public static void main(String[] args)
10: {
11: FileWriter fw = null;
12: FileReader fr = null;
13: try
14: {
15: fw = new FileWriter("IODemo1.txt");
16: fr = new FileReader("IODemo2.txt");
17: fw.write(fr.read());
18:
19: }
20: catch (IOException e)
21: {
22: System.out.println(e.toString());
23: }
24: finally
25: {
26: if(fw != null)
27: {
28: try
29: {
30: fw.close();
31: }
32: catch (IOException e)
33: {
34: System.out.println("close exception!");
35: }
36: }
37: if(fr != null)
38: {
39: try
40: {
41: fr.close();
42: }
43: catch (IOException e)
44: {
45: System.out.println("close exception!");
46: }
47: }
48: }
49: }
50: }
Java笔记(二十六)……IO流上 字节流与字符流的更多相关文章
- Java笔记(二十八)……IO流下 IO包中其他常用类以及编码表问题
PrintWriter打印流 Writer的子类,既可以接收字符流,也可以接收字节流,还可以接收文件名或者文件对象,非常方便 同时,还可以设置自动刷新以及保持原有格式写入各种文本类型的print方法 ...
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- JavaSE学习笔记(14)---File类和IO流(字节流和字符流)
JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...
- java 笔记(4) —— java I/O 流、字节流、字符流
Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...
- 【Java IO流】字节流和字符流详解
字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3 ...
- java的IO操作:字节流与字符流操作
流的概念 程序中的输入输出都是以流形式,流中保存的实际上都是字节文件. 字节流与字符流 字节流的操作: 1)输入:inputStream, 2)输出:outPutStream; 字符流的操作: 1)输 ...
- 【java】io流之字节流转为字符流:java.io.OutputStreamWriter和java.io.InputStreamReader
package 文件操作; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...
- Java基础:IO流之字节流和字符流
1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...
- Java之IO初识(字节流和字符流)
IO概述 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了.当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里.那么数据都是在哪些设备上的呢 ...
随机推荐
- 很不错的NGINX URL重写实例
转自:http://www.jbxue.com/article/2187.html 本文介绍nginx URL重写的相关知识,包括301重定向的内容等,希望对大家有所帮助. nginx rewrite ...
- Linux硬链接和符号链接(转)
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引节点来进行连接.在Li ...
- opcache运行时配置参数详解
PHP的opcode缓存又出 了新成员(说新不新,也有一段日子了),那就是opcache.新浪微博等都在使用,惠新宸老师强力推荐.本人最近根据官网地址 (http://www.php.net/manu ...
- js实现完美身份证号有效性验证
最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个 ...
- 一个月时间整理《深入浅出Node.js》
今天终于把朴灵老师写的<深入浅出Node.js>给学习完了, 这本书不是一本简单的Node入门书籍,它没有停留在Node介绍或者框架.库的使用层面上,而是从不同的视角来揭示Node自己内在 ...
- HTTP - PUT 上传文件/Shell
今天遇到几个PUT上传的点,但是都没利用起来.一怒之下,在自己本地试了一下.步骤如下: 一.环境: 首先,根据 配置Apache服务器支持向目录PUT文件 更新一下httpd.conf文件,重启所有服 ...
- 视图--bai
/*视图的必要性 create view population_all_view as select xxxx 详细信息 from qgck where rownum<500 -- sql语句不 ...
- 开发工具IDEA的使用
一. 先送上IDEA的下载链接 这是我个人的百度云链接,无毒无公害请放心下载~ 链接:http://pan.baidu.com/s/1kUMbatT 密码:i233 巧妇难为无米之炊,如果还没有下载安 ...
- long([x[, base]]) :将一个字符转换为long类型
python的int型最大值和系统有关,32位和64位系统看到的结果是不一样,分别为2的31次方减1和2的63次方减1,可以通过sys.maxint查看此值. >>> import ...
- SDUT 2622 最短路径(Dijkstra)
点我看题目 题意 :中文不详述. 思路 :因为这个题加了一个要求就是路径数目得是x的倍数.所以在原来算法的一维dis数组增加到二维,用来存走的路径数%x.也可以用spfa做. #include < ...