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语言历时十多年,已发展成为人类计算机史上影响深远的编程语言,从某种程度上来看,它甚至超出 ...
随机推荐
- JSON-Schema 最科学的表单验证模式
相关传送门: # JSON schema与表单验证 https://mp.weixin.qq.com/s?__biz=MjM5MTA1MjAxMQ==&mid=2651226711&i ...
- Maven环境下搭建SSH框架之Spring整合Hibernate
© 版权声明:本文为博主原创文章,转载请注明出处 1.搭建环境 Spring:4.3.8.RELEASE Hibernate:5.1.7.Final MySQL:5.7.17 注意:其他版本在某些特性 ...
- angularjs中的$q
先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...
- CSDN开源夏令营 基于Compiz的switcher插件设计与实现之前期准备 git的简单使用
因为项目的代码须要上传到git上.就须要学习一下git的使用了. 我初步接触了一下git,准备用此帖来记录git的学习,此帖会随着我对git了解的深入动态更新. 一.GIT的介绍 1.概述:git是一 ...
- ngnix 参考配置
#user nobody; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error ...
- Python鸡汤
标准库 很正确 外部库 有一些风险,可能有bug,可能文档不全,可能长时间未更新. ipython 1 pip 这应该是安装Python后第一个需要的命令 pip install -i -i, --i ...
- Hadoop学习笔记(二)——zookeeper使用和分析
分布式架构是中心化的设计.就是一个主控机连接多个处理节点,因此保证主控机高可用性十分关键.分布式锁是解决该问题的较好方案,多主控机抢一把锁.Zookeeper就是一套分布式锁管理系统,用于高可靠的维护 ...
- github-readme.md-格式
大标题 大标题一般显示project名,类似html的<h1> 你仅仅要在标题以下跟上=====就可以 中标题 中标题一般显示重点项,类似html的<h2> 你仅仅要在标题以下 ...
- 手机touch事件
touchstart:触摸开始的时候触发 touchmove:手指在屏幕上滑动的时候触发 touchend:触摸结束的时候触发 而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点( ...
- Java水印图片处理
今天需要用Java程序给图片加水印,于是在网上找到了一段代码,感觉很好,于是记录了下来,原来的网址给忘了: import java.awt.AlphaComposite; import java.aw ...