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语言历时十多年,已发展成为人类计算机史上影响深远的编程语言,从某种程度上来看,它甚至超出 ...
随机推荐
- iOS UIView添加阴影
_bottomView.layer.masksToBounds = NO; _bottomView.backgroundColor = [UIColor whiteColor]; _bottomVie ...
- nginx proxy_pass 里的”/”
见配置,摘自nginx.conf 里的server 段: server { listen 80; server_name abc.163.com ; location / { proxy_pass h ...
- py.test
只运行某一个用例 pytest test_mod.py::test_func 或者 pytest test_mod.py::TestClass::test_method
- Huffman编码(Huffman树)
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "Huffman编码(Huffman树)" 的idea 并用源代码加以实现: 0.2) ...
- 嵌入式专题: S5PV210 - MPEG4编码
我想说不台的平台,如tiny210和x210.它们的头文件是有稍微区别的. 我这个是x210下的代码.但都须要注意的是NV12T与NV12的问题,默认要求输入的图片是NV12T,经过调整之后,能够同意 ...
- IP地址、子网掩码、网关的关系
网络管理中的IP地址.子网掩码和网关是每个网管必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置.以下我们就来深入浅出地讲解什么是子网掩码. IP地址的结构 要想理解什么是子网掩码 ...
- USB设备驱动程序(二)
首先我们来看USB设备描述符的结构: 在USB总线识别设备阶段就将USB描述符发送给了USB总线驱动程序,设备的数据传输对象是端点,端点0是特殊端点,在USB总线驱动程序识别阶段, 会分配一个地址给U ...
- 在UIWebView中设置cookie
本文转载至 http://blog.csdn.net/chengyakun11/article/details/8863878 项目中,需要在打开3g网页时,通过cookie传递一些信息. 实现代码 ...
- lua(仿类)
Account = { balance = } function Account:deposit(v) self.balance = self.balance + v end function Acc ...
- 【BZOJ1444】[Jsoi2009]有趣的游戏 AC自动机+概率DP+矩阵乘法
[BZOJ1444][Jsoi2009]有趣的游戏 Description Input 注意 是0<=P Output Sample Input Sample Output HINT 30%的 ...