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盘,可以把一个视频,拷贝到你的电脑硬盘里.那么数据都是在哪些设备上的呢 ...
随机推荐
- django分页工具
from django.core.paginator import Paginator 此对象可以进行分页操作 objects = Entry.objects.all() page = Paginat ...
- 大型B/S系统技术总结(不断更新)
看了<淘宝技术这十年>和<大型网站系统与Java中间件实践>这些书,对大型B/S系统的构建越来越感兴趣,于是尝试收集和总结一些常用的技术手段.不过大型网站的架构是根据业务需求不 ...
- Html学习_简易个人网页制作
应用学到的内容,制作简易个人网页 <!DOCTYPE html> <html> <head> <title>Jane.liu</title> ...
- poj 3013 Big Christmas Tree Djistra
Big Christmas Tree 题意:图中每个节点和边都有权值,图中找出一颗树,树根为1使得 Σ(树中的节点到树根的距离)*(以该节点为子树的所有节点的权值之和) 结果最小: 分析:直接求出每个 ...
- linux之vim编辑器
Vi简介1. Vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序.2. Vi不是排版程序,只是一个纯粹的文本编辑程序.3. Vi是全屏幕文本编辑器,它没有菜单,只有命令.4. Vi不是基 ...
- OFBiz之SVN下载地址
trunk: $ svn co http://svn.apache.org/repos/asf/ofbiz/trunk ofbiz release13.07: $ svn co http://svn. ...
- uCOS-II任务的挂起和恢复
函数描述 OSTaskSuspend() 功能描述:无条件挂起一个任务.调用此函数的任务也可以传递参数OS_PRIO_SELF,挂起调用任务本身.函数原型:INT8U OSTaskSuspend ( ...
- C# 操作mongodb 分组
c#操作mongodb的分组的简单例子: 1.首先要下载c#对应的mongodb驱动,官方下载地址:https://github.com/mongodb/mongo-csharp-driver/rel ...
- 开发错误日志之FTP协议传输文件问题
从开发端用FTP协议向服务器(Linux系统)传输文件时,cat -A查询文件内容中行尾会有^M出现. 解决方案:改用SFTP协议上传文件.
- DHTMLX 前端框架 建立你的一个应用程序 教程(六)-- 表格加载数据
从数据库加载数据 这篇我们介绍从MySQL数据库中加载数据到表格 我们使用 MySql的数据库dhtmlx_tutorial 和表contacts 示例使用的是PHP平台和dhtmlxConnecto ...