java入门了解11
1.码表

(一)码表种类
ASCII:美国标准信息交换码,用一个字节的7位可以表示
ISO8859-1:拉丁码表。欧洲码表,用一个字节的8位表示,对ASCII没用到空间补充了自己特有的
GB2312:中国的中文编码表。
GBK: 中国的中文编码表升级,融合了更多的中文文字符号。
Unicode: 国际标准码,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicode。
UTF-8: 最多用三个字节来表示一个字符。
(二)注意
不同的码表对应可能是不一样的;例如:中国 在gbk中对应100 200 在big5中可能就是? …
GBK:两个字节包含的英文,和扩展的中文
utf-8:万国码表,推行,1~3个字节,英文1个字节,中文3个字节,是为了节省空间
(三)编码解码
编码:getByte();解码:new String(byte,[码表])
2.字符流
(一)字节流与字符流区别
字节流读取的是文件中的二进制数据,读到的数据并不会帮你转换成你看得懂的字符。
字符流会把读取到的二进制的数据进行对应的编码与解码工作。字符流 = 字节流 + 编码(解码)
一般操作文字类的用字符流,操作文件,图片类的用字节流
(二)分类
a.Reader:输入字符流的基类,抽象类
子类:1.FileReader
用法: 1. 找到目标文件
2. 建立数据的输入通道
3. 读取数据
4. 关闭资源FileReader
例子:
public static void readTest1(String path) throws IOException{
File f=new File(path);
FileReader fr=new FileReader(f);
char[] buffer=new char[1024];
int length=0;
while((length=fr.read(buffer))!=-1){
System.out.print(new String(buffer,0,length));
}
fr.close();
}
2.BufferedReader:和之前所说的缓冲流的差不多内部都维护了一个字符数组
不仅增加读取效率也扩展了功能
缓冲流本身不具备读写能力记住这些能力都是传进来的对象给的
例子:
public static void bufferReader(String path) throws IOException{
File f=new File(path);
FileReader fr=new FileReader(f);
BufferedReader br=new BufferedReader(fr);
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
}
b.Writer:输出字符流,抽象类
子类:1.FileWriter
用法:1. 找到目标文件。
2. 建立数据输出通道
3. 写出数据。
4. 关闭资源
注意:1.FileWriter内部维护了一个1024字符数组,写数据的时候先是将数据存到内存数组中,想要将数据真正写到磁盘中需要调用flush()/close()/填满了内存数组
2.目标文件要是不存在,会自动创建
3.如果目标文件存在,且其中有数据,写数据时想要在后面添加数据,创建FileWriter(file,true),第二个参数要是true
例子:
public static void writeTest1() throws IOException{
File f=new File("C:a.txt");
FileWriter fw=new FileWriter(f);//如果目标文件不存在自动创建
String content="今天天气很好哦";
fw.write(content);
fw.close();
}
2.BufferedWriter: 缓冲输出字符流
提高FileWriter的写数据效率与拓展FileWriter的功能。
BufferedWriter内部只不过是提供了一个8192长度的字符数组作为缓冲区而已,拓展了FileWriter的功能
例子:
public static void bufferWriter(String path) throws IOException{
File f=new File(path);
FileWriter fw=new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);
String content="nnihao asdkfalskdfha faklhdf adkfh adf";
//bw.newLine();//换行
bw.write(content);
}
(三)综合例子
3.装饰者设计模式

(一)出现原因
当我们想要给一个类添加一个功能的时候,一般我们用的是继承这个类再添加特定功能,这样的好是好,但是当我们想要给这个类添加很多功能的时候,因为之间没有联系,导致继承体系很大->这时候我们会想什么样的设计模式能在各个子功能互相调用,这样好处互相装饰,调用灵活-》出现了“装饰设计者模式”
(二)原理
达到互相装饰的功能需要:一个功能a,一个功能b,需求是功能c有功能a,b这时候装饰设计者模式就发挥作用,通过用b再装饰a达到a,b功能都有的c功能
在装饰类中有一个被装饰类,之后就在这个装饰类中调用被装饰类的方法,在添加上自己的方法,为了能够使这种类型的装饰类能被其他装饰类互相调用达到功能更丰富的装饰类,而这个被装饰类可以是其他装饰类,这里要能互相调用,需要用到泛型的概念,这里就需要在这些装饰类有一个共同的父类或父接口
(三)步骤
1.在装饰类内部维护一个被装饰类的引用
作用:调用被装饰类的方法再添加自己的方法
2.在各装饰类有一个共同的父类或者父接口
作用:装饰类之间互相装饰
(四)例子:
//使用下面的装饰设计
public class zhuangShisjmo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f=new File("C:/a.txt");
FileReader fr=new FileReader(f);
BufferedReader bufferedReader=new BufferedReader(fr);
//Test1(bufferedReader);
//Test2(bufferedReader);
Test3(bufferedReader);
}
public static void Test1(BufferedReader bufferedReader) throws IOException{
bufferedLineNum buffln=new bufferedLineNum(bufferedReader);
String line=null;
while((line=buffln.readLine())!=null){
System.out.println(line);
}
}
public static void Test2(BufferedReader bufferedReader) throws IOException{
BufferedSemi buffln=new BufferedSemi(bufferedReader);
String line=null;
while((line=buffln.readLine())!=null){
System.out.println(line);
}
}
public static void Test3(BufferedReader bufferedReader) throws IOException{
bufferedLineNum buffln=new bufferedLineNum(bufferedReader);
BufferedSemi buffs=new BufferedSemi(buffln);
String line=null;
while((line=buffs.readLine())!=null){
System.out.println(line);
}
}
}
/**
* 装饰类给被装饰者BufferedReader添加带行号的输入字符流
* @author wo
*
*/
class bufferedLineNum extends BufferedReader{
//一个被装饰 类的引用
BufferedReader bufferedReader;
int count = 1;//计数器
public bufferedLineNum(BufferedReader bufferedReader){
super(bufferedReader);//没有意义只是为了不报错;
//继承父类(含有有参构造函数)是必须要在子类写有参构造函数
//不写就是无参构造函数,这里要直至父类无参构造函数但父类没有
this.bufferedReader=bufferedReader;
}
public String readLine() throws IOException{
String line=bufferedReader.readLine();
if(line==null){
return null;
}
line=count+":"+line;
count++;
return line;
}
}
/**
* 装饰类给被装饰者BufferedReader添加每行添加双引号
* @author wo
*
*/
class BufferedSemi extends BufferedReader{
BufferedReader bufferedReader;
public BufferedSemi(BufferedReader bufferedReader){
super(bufferedReader);//没有意义只是为了不报错;
//继承父类(含有有参构造函数)是必须要在子类写有参构造函数
//不写就是无参构造函数,这里要直至父类无参构造函数但父类没有
this.bufferedReader=bufferedReader;
}
public String readLine() throws IOException{
String line = bufferedReader.readLine(); //如果这里的ReadLine方法是调用了buffereLineNum的readLine方法,问题马上解决。
if(line==null){
return null;
}
line = "\""+line +"\"";
return line;
}
}
java入门了解11的更多相关文章
- Java入门(二)——果然断更的都是要受惩罚的。。。
断更了一个多月,阅读量立马从100+跌落至10-,虽说不是很看重这个,毕竟只是当这个是自己的学习笔记,但有人看,有人评论,有人认同和批评的感觉还是很巴适的,尤其以前有过却又被剥夺的,惨兮兮的. 好好写 ...
- JAVA入门--目录
在此记录自己的JAVA入门笔记,备忘 JAVA入门[1]--安装JDK JAVA入门[2]-安装Maven JAVA入门[3]—Spring依赖注入 JAVA入门[4]-IntelliJ IDEA配置 ...
- Java入门1
一.eclipse的简单使用 1.新建项目 在package explorer的空白处点击右键,新建一个项目(new->Java Project)或者点击菜单栏的File->JavaPro ...
- Java入门练习之四则运算
Java入门练习之四则运算 项目目的 制作一个Java控制台程序,让他可以随机生成四则运算,并针对用户的输入判断对错. 项目分析 该项目本质上是一个四则运算出题器,可以创建一个Question类,其中 ...
- Java入门(三):变量和运算符
上次谈到了Java的基本数据类型,今天接着聊Java的变量.运算符. 一.变量 1.变量的分类 变量分为成员变量.局部变量和常量,其中成员变量又分为实例变量.类变量. 2.变量的定义 语法:变量类型( ...
- Java入门知识点
Java入门知识点 Java源代码的流程 Java程序由.java文件生成,通过JVM进行编译得到字节文件.class class HelloWorld { public static void ...
- Java入门系列-26-JDBC
认识 JDBC JDBC (Java DataBase Connectivity) 是 Java 数据库连接技术的简称,用于连接常用数据库. Sun 公司提供了 JDBC API ,供程序员调用接口和 ...
- Java入门——在Linux环境下安装JDK并配置环境变量
Java入门——在Linux环境下安装JDK并配置环境变量 摘要:本文主要说明在Linux环境下JDK的安装,以及安装完成之后环境变量的配置. 使用已下载的压缩包进行安装 下载并解压 在Java的官网 ...
- Java入门——初识Java
Java入门——初识Java 摘要:本文主要对Java这门编程语言进行简单的介绍. Java简介 说明 Java语言历时十多年,已发展成为人类计算机史上影响深远的编程语言,从某种程度上来看,它甚至超出 ...
随机推荐
- sprint3 【每日scrum】 TD助手站立会议第八天
站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 调整闹钟和整个项目的显示效果,最后做出了微信界面滑动的显示效果 整合原来做过的功能,并做相应的改进,整合其他的功能 在界面的设计和用户交互上始 ...
- 使用 yarn 作为 Npm 的代替方案
相关传送门: # window 安装包下载https://yarnpkg.com/zh-Hans/docs/install#windows-stable # yarn官方网站 https://yarn ...
- poj 3537 Crosses and Crosses 博弈论之grundy值
题意: 给1*n的格子,轮流在上面叉叉,最先画得3个连续叉叉的赢.问先手必胜还是必败. 分析: 求状态的grundy值(也就是sg值),详细怎么求详见代码.为什么这么求要自己想的,仅仅可意会(别人都说 ...
- sam配置命令概要
./install_packages --enhanced_reporting katello-configure --deployment=sam --user-pass=redhat chkcon ...
- Cobbler部署之FAQ处理
Cobbler报错处理 通过cobbler check检查出现的报错 红色标注为报错关键信息 9.1 报错一 # cobbler check httpd does not appear to be r ...
- 关于reset.css的那些事
分析过程:body: 发现在没有填写任何内容的情况下是没有margin 的 只有在加入了文字或者div中以后才有了margin(废话)那么 我想问一下 body的padding 默认的有吗??在哪里 ...
- #region的作用和注释快捷键
让函数在编辑器中收起来,简洁 #region All MenuItems [@MenuItem("xxx")] public static void Init() { XXXXX; ...
- mysql-proxy做客户端连接转发【外网访问内网mysql】
功能 用于外网客户端连接内网的MySQL,将此工具安装在中转服务器上. 软件版本 mysql-proxy-0.8.1-linux-rhel5-x86-64bit.tar.gz 简单的配置过程 解压后有 ...
- C语言基础知识【简介】
C 简介1.关于 CC 语言是为了编写 UNIX 操作系统而被发明的.C 语言是以 B 语言为基础的,B 语言大概是在 1970 年被引进的.C 语言标准是于 1988 年由美国国家标准协会(ANSI ...
- PHP-Manual的学习----【序言】
2017年6月27日16:57:32 学习资料:2015-PHP-Manual 打好坚实的基础是做任何事的前提 序言: 笔记: 1.PHP,即"PHP: Hypertext Preproce ...