Java笔记第五弹
编码表
将字符存储到计算机中----编码;反之,则为解码;
GBK编码:最常用的中文码表
GB18030--最新的中文码表
Unicode字符集:业界的一种标准,也称为统一码、万国码
UTF-8编码:可以用来表示Unicode标准中任意字符
编码规则:
128个US-ASCII字符,只需要一个字节编码
拉丁文等字符,需要两个字节编码
大部分常用字(含中文),使用三个字节编码
其他极少使用的Unicode辅助字符,使用四字节编码
字符串中的编码解码问题
//编码
byte[] getBytes();//默认字符集
byte[] getBytes(String charsetName);//指定字符集
//解码
String(byte[] bytes);//默认字符集
String(byte[] bytes,String charsetName);//指定字符集
相关应用:
编码和解码需要用同一个字符集
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
String s="中国";
byte[] by=s.getBytes("GBK");
System.out.println(Arrays.toString(by));
String ss=new String(by,"GBK");
System.out.println(ss);
}
}
字符流中的编码解码问题
字符流抽象基类:Reader、Writer
相关的两个类:InputStreamReader、OutputStreamWriter
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
//写入
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myByteStream\\osw.txt"),"UTF-8");
osw.write("中国");
osw.close();
//读出
InputStreamReader isr=new InputStreamReader(new FileInputStream("myByteStream\\osw.txt"),"UTF-8");
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
}
}
字符流写数据的5种方式
void write(int c);//写一个字符
void write(char[] cbuf);//写入一个字符数组
void write(char[] cbuf,int off,int len);//写入字符数组的一部分
void write(String str);//写一个字符串
void write(String str,int off,int len);//写一个字符串的一部分
相关应用:
//写入字符
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
osw.write(97);
osw.flush();//刷新流
osw.write(98);
osw.close();//释放资源时,先进行刷新操作
//释放资源后,不能再向里面写入数据
}
}
//写入字符数组
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
char[] arr={'a','b','c','d','e'};
osw.write(arr);
osw.close();
}
}
//写入一部分字符数组
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
char[] arr={'a','b','c','d','e'};
osw.write(arr,0,arr.length);
osw.close();
}
}
//写入字符串
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
osw.write("asdfg");
osw.close();
}
}
//写入一部分字符串
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
osw.write("asdfg",0,"asdfg".length());
osw.close();
}
}
字符流读数据的2种方式
int read();//一次读一个字符数据
int read(char[] cbuf);//一次读一个字符数组数据
//一次读一个字符数据
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
InputStreamReader isr=new InputStreamReader(new FileInputStream("myByteStream\\isr.txt"));
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
}
}
//一次读一个字符数组数据
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
InputStreamReader isr=new InputStreamReader(new FileInputStream("myByteStream\\isr.txt"));
char[] arr=new char[1024];
int len;
while ((len = isr.read(arr)) != -1) {
System.out.println(new String(arr,0,len));
}
isr.close();
}
}
案例:复制Java文件
//基础版
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myByteStream\\Copy.java"));
InputStreamReader isr=new InputStreamReader(new FileInputStream("myByteStream\\ConversionStreamDemo.java"));
int ch;
while((ch=isr.read())!=-1){
osw.write(ch);
}
char[] arr=new char[1024];
int len;
while((len=isr.read(arr))!=-1){
osw.write(new String(arr,0,len));
}
osw.close();
isr.close();
}
}
//升级版
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
FileWriter fw=new FileWriter("myCharStream\\Copy.java");
FileReader fr=new FileReader("myCharStream\\ConversionStreamDemo.java");
int ch;
while((ch=fr.read())!=-1){
fw.write(ch);
}
char[] arr=new char[1024];
int len;
while((len=fr.read(arr))!=-1){
fw.write(new String(arr,0,len));
}
fw.close();
fr.close();
}
}
Java笔记第五弹的更多相关文章
- Effective java笔记(五),枚举和注解
30.用enum代替int常量 枚举类型是指由一组固定的常量组成合法值的类型.在java没有引入枚举类型前,表示枚举类型的常用方法是声明一组不同的int常量,每个类型成员一个常量,这种方法称作int枚 ...
- Java笔记(十五)……面向对象IV多态(polymorphism)
概述 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型 猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物. 动物 y = new 猫(); 动 ...
- Java笔记(五)泛型
泛型 一.基本概念和原理 泛型将接口的概念进一步延申,“泛型”的字面意思是广泛的类型. 类.接口和方法都可以应用于非常广泛的类型,代码与它们能够操作 的数据类型不再绑定到一起,同一套代码可以应用到多种 ...
- Java笔记(五)
泛型:JDK1.5版本后出现的新特性.用于解决安全问题,是一个类型安全机制. 好处:将运行期间出现问题ClassCastException,转移到了编译时期.方便程序员解决问题,让运行时问题减少. 避 ...
- 菜鸡的Java笔记 第五 - java 程序逻辑控制
程序主要分为三种逻辑:顺序,分支,循环. if 分支语句 if分支语句是最为基础的分支操作,但是其有三种使用形式: if语句 if.....else 语句 if....else...if...el ...
- this、访问修饰符——Java笔记(五)
this 表示当前对象 谁调用方法谁就是当前对象 用static修饰的代码块里面不能使用this 方法里面有一个和字段同名的局部变量时,不能省略this this还 ...
- Java虚拟机笔记(五):JVM中对象的分代
为什么要分代 为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用, ...
- Java多线程编程实战指南(核心篇)读书笔记(五)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- java并发编程笔记(五)——线程安全策略
java并发编程笔记(五)--线程安全策略 不可变得对象 不可变对象需要满足的条件 对象创建以后其状态就不能修改 对象所有的域都是final类型 对象是正确创建的(在对象创建期间,this引用没有逸出 ...
随机推荐
- java通信
RPC:同步 http webservice RMI:同步 RMI 是面向对象方式的 Java RPC . 类要extends java.rmi.Remote接口 JMS:异步 需要有消息队列 act ...
- react native 上传图片(后面有空写一个,完整的案例)
图片上传的思路很正确 https://www.jianshu.com/p/c9f030fa6754 1. 获取图片路径 利用react-native-image-crop-pick 从手机中获得图片的 ...
- 命令提示符怎么打开和Dos命令的基本使用
Dos命令 Dos命令窗口我们可以通过win+R输入cmd来打开 如果要用管理员身份打开直接在开始里搜索命令提示符,以管理员身份打开! 一些简单的Dos命令 //切换盘符 盘符名: //进入 cd / ...
- flutter 底部导航栏 BottomNavigationBar
话不多说,上代码 import 'package:flutter/material.dart'; import 'package:flutter_zhihu/pages/tabs/homeTab.da ...
- [Unity3D 小Tricks] 如何修改Unity3d脚本默认模板?
众所周知,unity默认的模板总是Update()和Start(),但往往我们并不需要,每次都要手动删除非常麻烦. 但可以更改如下模板文件 C:\Program Files\Unity 2020.3. ...
- Leecode-每日一题-题目448. 找到所有数组中消失的数字
今天重新开始刷leecode 为了致敬我的偶像,还是选择把做题笔记发在博客园上 题目448. 找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数 ...
- defer、panic、recover
defer(延迟执行语句) 多个延迟执行语句的处理顺序 package main import ( "fmt" ) func main() { fmt.Println(" ...
- PLC入门笔记12
1.边沿应用 (1)边沿开关 (2)上升沿触发 下降沿触发 (3) MOVP K4M0 D0 传送比较 movp (=mov) 脉冲型指令 前面条件成立只能执行一次,仅执行一次扫描周期 不带P MOV ...
- Java开发的事务
代码来自https://blog.csdn.net/weixin_42950079/article/details/99674292 可以看出jdbc的一个事务有这么几个步骤:1.关闭sql自动提交: ...
- RocketMQ4.x本地源码部署教程
安装前提条件(推荐) 64bit OS, Linux/Unix/Mac (Windows不兼容)64bit JDK 1.8+; 快速开始 http://rocketmq.apache.org/docs ...