当前位置: 首页 > 编程日记 > 正文

Java IO 字节流与字符流 (三)

概述

IO流用来处理设备之间的数据传输

Java对数据的操作时通过流的方式

Java用于操作流的对象都在IO包中

流按操作的数据分为:字节流和字符流

流按流向不同分为:输入流和输出流

IO流常用基类

字节流的抽象基类

InputStream,OuputStream

字符流的抽象基类

Reader,Writer

注:

这些基类的子类都是以基类的名称结尾的,如FileReader,FileInputStream

字节流

io2

字节流:以字符为导向的流

简单介绍一个例子,演示字节流对图片的复制

   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: }

字符流

io1

字符流:以字符为导向的流

字符流只能操作文本,下面是字符流拷贝文本文件的例子

   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体系中的所有类进行加强,加入缓冲技术,方法的接口中使用的是父类引用,利用多态提高了功能扩展性

装饰设计模式的演变过程

io7

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: }

相关文章:

LeetCode实战:两两交换链表中的节点

题目英文 Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list’s nodes, only nodes itself may be changed. Example: Given 1->2->3->4, you should return the list as 2->1->4->3.…

在UI设计中如何正确使用颜色

在我们进行UI设计时,颜色往往是我们表达理念重要的一点,但也是我们常常会忽视的一点。颜色其实如同语言一样,我们可以通过颜色的变化组合,来表达不同的情绪。 正确使用颜色不单能让我们吸引到客户,也能更好地表达我们的…

如何用Python做Web开发?——Django环境配置

用Python做Web开发,Django框架是个非常好的起点。如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手。 概念 最近有个词儿很流行,叫做“全栈”(full stack)。各大IT培训机构几乎都在宣传这一概念。告诉你只需要交1XXXX…

LeetCode实战:旋转链表

题目英文 Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: Input: 1->2->3->4->5->NULL, k 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2…

blog地址:

blog地址: blog地址: http://blog.csdn.net/q107770540posted on 2010-11-19 08:36 Tim_ 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/q107770540/archive/2010/11/19/1881399.html

Spring MVC框架有哪些优点

Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。 Spring MVC具有如下特点: 是Spring框架的一部分,可以方便的利用Spring所提供的…

MVC+Ninject+三层架构+代码生成 -- 总结(四、數據層)

1.數據層使用了SqlSugar 庫類 。 數據層使用了SqlSugar 庫類 ,有興趣的 可以學習 http://www.codeisbug.com/Doc/8/1133,個人覺得比EF 簡單,容易上手,推薦1。 數據層使用代碼生成,所以考慮得比較多。 1.GetAllList()-…

台湾前十大科技公司拼不过三星(往后一点三星都不要买啦!)

台湾前十大科技公司拼不过三星,往后一点三星都不要买啦!本来还可以买它的内存和液晶,不过现在是一点都不能买了,再买就真反了他了! 三星像糖果也像毒药,让台湾LED类股1年涨3倍,但也让鸿海市值一夜之间消失350亿元(新台币,下同)。从来没有一刻…

技术图文:如何利用 C# 向 Access 数据库插入大量数据?

背景 通常我们在做数据分析与处理之前,需要把从网站爬取的数据或者从 甲方 系统中导出的数据存入到自己的数据库中。如果数据量小,直接利用 SQL的 Insert 语句逐条插入就好。可是数据量上万条之后,再利用这样的方法就会奇慢无比,…

Web前端面试自我介绍对话技巧注意事项

大家在学会了web前端技术后,当然是要准备找一个适合自己的web前端工作了,那么面试环节是必不可少的,有一个良好的自我介绍表述,在HR心中也能加分不少,接下来小编就为大家介绍一下Web前端面试自我介绍对话技巧注意事项。…

Android使用ListView控件问题

Android使用ListView控件问题&#xff1a; The application has stopped unexpectedly, please try again。 开发环境&#xff1a;android 1.6 最低兼容 4.0 报错代码如下&#xff1a; main.xml 代码 1 <?xml version"1.0" encoding"utf-8"?>2 <…

技术图文:如何实现 DataTable 与模型类 List 的相互转换?

通常情况下&#xff0c;我们在做工程项目的时候&#xff0c;需要把待处理的数据存储在数据库中。 通过 SQL 的 Select 语句很容易把查询的结果以 DataTable 的方式得到&#xff0c;但在对 DateTable 中的数据进行进一步的检索时远远没有模型类 List<T> 方便。 所以&…

SQL server 基本语句

SQL server数据库基本语句一、实验要求&#xff1a;1、 查询student表中所有学生的信息select * from student如图所示2、查询student表中“姓名”“所在班级”和“成绩”列内容select 姓名&#xff0c;所在班级&#xff0c;成绩 from student如图所示3、查询student表…

Python中if条件判断语句怎么用?

俗话说“不积跬步无以至千里”。学习了Python的基本语法后&#xff0c;接下来我们学习Python常的if条件判断语句。 if语句是最简单的条件判断语句&#xff0c;它可以控制程序的执行流程&#xff0c;其使用格式如下: if判断条件: 满足条件时要做的事情1… 满足条件时要做的事情2…

Arcmap技巧总结

Arcmap技巧总结 1. 要素的剪切与延伸 实用工具 TASK 任务栏 Extend/Trim feature 剪切所得内容与你画线的方向有关。 2. 自动捕捉跟踪工具 点击Editor工具栏中Snapping来打开Snapping Environment对话框 捕捉设置中有3个选项&#xff0c; vertex edge end 分…

Spring Web MVC(一)

概述Spring Web MVC框架的特点五大核心组件编程步骤 五大核心组件DispatcherServlet前端控制器WebApplicationContext中特殊的bean处理过程 HandlerMapping 处理映射Spring中最常用的两个处理器映射BeanNameUrlHandlerMappingSimpleUrlHandlerMapping拦截器HandlerInterceptor概…

技术图文:如何利用BigOne的API制作自动化交易系统 -- 身份验证

背景 最近&#xff0c;自己在技术精进方向上有所犹豫&#xff0c;是往"网络渗透"的方向走呢&#xff1f;还是往"量化交易"的方向走&#xff1f; 如果选择精进“网络渗透”&#xff0c;就需要学习各种Web渗透技术、客户端渗透技术、移动环境渗透技术、社会…

零基础学习java软件开发攻略

Java是主流开发语言&#xff0c;应用普遍。Spring Boot是Java开发时常用框架&#xff0c;有非常丰富的组件和易用的功能。实际开发工作中涉及到的知识点比较多&#xff0c;将它们分门别类&#xff0c;专题攻关&#xff0c;由点到面&#xff0c;学习效率非常高。 软件开发系统学…

Linux--档案/目录 权限及修改

首先所有权限对于三类用户分别设定&#xff1a; User(所有者) / Group(组群) / Others(其他)。 权限也是有三种&#xff1a;Read / Write / eXecute&#xff0c;这三种权限对于文档和目录有不同的意义。 1. 对于文档&#xff1a; Read&#xff1a;可以查看文档的内容 Write&…

sklearn:Python语言开发的通用机器学习库

引言&#xff1a;深入理解机器学习并全然看懂sklearn文档&#xff0c;须要较深厚的理论基础。可是。要将sklearn应用于实际的项目中&#xff0c;仅仅须要对机器学习理论有一个主要的掌握&#xff0c;就能够直接调用其API来完毕各种机器学习问题。本文选自《全栈数据之门》。将向…

资料分享:送你一本《BigONE Developer API V2》电子书!

背景 昨天&#xff0c;我推送了一篇技术图文《如何利用 BigOne 的 API 制作自动化交易系统 – 身份验证》&#xff0c;里面提到了 BigONE Developer API V2。为了方便自己也方便他人&#xff0c;所以把这份文档整理成 PDF。如果大家对封装 BigONE 提供的 API 感兴趣可以下载这…

Web前端培训面试攻略

学会web前端技术之后&#xff0c;接下来就是要找到一份合适的工作&#xff0c;今天小编要跟大家分享的文章是关于web前端面试攻略&#xff0c;做好这些可以给面试环节加分&#xff0c;找到合适的工作几率会更高&#xff0c;希望本篇文章能够对大家有所帮助。 ​  Web前端培训…

微软鲍尔默回应被苹果超越:将开发更好产品

针对苹果超过微软成为全球市值最高的高科技公司的消息&#xff0c;微软首席执行官史蒂夫鲍尔默 (Steve Ballmer)周四表示&#xff0c;其目标是开发更好的产品&#xff0c;提高盈利能力。鲍尔默周四在印度首都新德里说&#xff0c;“我每天思考的是如何改进产品、如何使产品更 具…

技术图文:如何利用C#实现Huffman编码?

背景 Huffman编码 在通信和数据压缩领域具有重要的应用。 在介绍 Huffman 编码具体实现之前&#xff0c;先介绍几个相关的概念。 概念1&#xff1a;树中结点的带权路径长度 – 根结点到该结点的路径长度与该结点权值的乘积。 概念2&#xff1a;树的带权路径长度 – 树中所有…

ELK 5.x日志分析 (二) Elasticserach 5.2 安装

2019独角兽企业重金招聘Python工程师标准>>> 解压安装包到/opt/elasticsearch 目录下面 [roots1-prod-it-web01 opt]# tree -L 1 elasticsearch/ elasticsearch/ ├── bin ├── config ├── lib ├── LICENSE.txt ├── modules ├── NOTICE.txt ├── …

什么样的人适合学习UI?

UI时代的到来&#xff0c;让我们的生活都多姿多彩&#xff0c;很多企业越来越注重UI设计这方面&#xff0c;想要学习UI设计的人也越来越多&#xff0c;暗恶魔什么样的人适合学习UI呢? 什么样的人适合学习UI? 目前的UI设计很多都是停留在手机端设计&#xff0c;网页&#xff0…

Uva 10074【递推dp】

UVa 10074 题意:求01矩阵的最大子0矩阵。 http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚。先求Largest Empty Interval,枚举每个点为矩形的右下角。 1 #include<iostream>2 #include<cstdio>3 #include<cstring>4 #include<…

金融时报:谷歌撤离中国有99.9%的可能性

据国外媒体报道&#xff0c;英国《金融时报》周六发表文章称&#xff0c;谷歌与中国政府就监管问题的谈判显然陷入僵局&#xff0c;而这家世界最大的搜索引擎关闭中国业务现在有99.9%的可能性。《金融时报》称&#xff0c;谷歌已经制定了关闭中国搜索引擎的详细计划。该报援引一…

技术图文:匿名方法是怎样演变为Lambda表达试的?

背景 “Lambda 表达式”&#xff08;lambda expression&#xff09;是一个匿名函数&#xff0c;Lambda 表达式基于数学中的 λ演算得名&#xff0c;直接对应于其中的 lambda 抽象&#xff08;lambda abstraction&#xff09;&#xff0c;是一个匿名函数&#xff0c;即没有函数…

python和c++的相互调用教程

日常工作中会遇到需要python与cpp代码之间的相互调用&#xff0c;工作的应用复杂&#xff0c;都是取决于代码的多少&#xff0c;但是总的方法不变&#xff0c;这里用两个简单例子说明下&#xff0c;有兴趣的筒子可以探讨下~~ 我的测试环境&#xff1a;ubuntu1604&#xff0c;py…