您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase第三季学习笔记-常见字符编码
发布时间:2017-08-10 15:28:31编辑:雪饮阅读()
常见字符编码
iso8859-1:
编码属于单字节编码,最多只能表示0-255的字符范围,主要在英文上应用。
GBK/GB2312:
中文的国际编码,专门用来表示汉字,是双字节编码
unicode:
java中就是使用此编码方式,也是最标准的一种编码,是使用16进制表示的编码。但此编码不兼容iso8859-1编码。
UTF:
由于unicode不兼容iso8859-1编码,而且容易占用更多的空间,而且对英文也需要使用两个字节编码,这样使得Unicode不便于传输和存储,因此产生了utf编码,utf编码兼容了iso8859-1编码,也可以用来表示所有语言字符,不过utf是不定长(根据字符大小自动匹配,这样就省空间,不会因为定长的原因导致某些字符占用多余空间)编码,每个字符的长度从1-6个字节不等,一般在中文网页中使用此编码,因为这样可以节省空间。
代码示例:文件分割
package com.vince.homework;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class HomeWork1 {
public static void split(String src,int mb,String dest){
File srcFile=new File(src);
//判断文件是否存在
if(!srcFile.exists()){
return;
}
long countSize=srcFile.length();//得到文件的总大小(字节)
long fileSize=1024*1024*mb;//要分割的每个文件的大小(字节)
int num=0;//分割的份数
if(countSize%fileSize==0){
num=(int)(countSize/fileSize);
}
else{
num=(int)(countSize/fileSize)+1;
}
/*--------------------------------------*/
try {
//根据文件构建文件输入流
InputStream in = new FileInputStream(srcFile);
//根据文件输入流构建缓冲文件输入流
BufferedInputStream bis=new BufferedInputStream(in);
BufferedOutputStream bos=null;
//设置每次从缓冲流中读取的长度
byte[] bytes=new byte[1024*1024];
int len=-1;
for(int i=0;i<num;i++){
//循环为每个分割文件建立其输入流,(对于本程序来说是输出流)
String newFile=dest+File.separator+srcFile.getName()+"-"+i+".dat";
bos=new BufferedOutputStream(new FileOutputStream(newFile));
int count=0;//记录每个文件当前写入的大小
//开始读取文件
//从文件输入流bis中向bos输出流写入,每次写入bytes长度,
//两种情况:
//1、bis主流被读取完毕则不能继续读取即(len=bis.read(bytes))!=-1
//2、写入到每个分割文件的最大值时不能继续写入,而是进入下一个文件继续从bis主流向下一个分割文件写入,即if(count>=fileSize){break;}
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
bos.flush();
count+=len;
if(count>=fileSize){
break;
}
}
bos.close();
}
bis.close();
in.close();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
String src="E:\\test1\\video.mp4";
String dest="E:\\test2\\";
int size=10;
System.out.println("开始分给文件。。。");
split(src,size,dest);
System.out.println("文件分割完毕。。。");
}
}
示例代码:文件合并
package com.vince.homework;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class HomeWork2 {
public static void merge(String dest,File... files){
//获取文件名
String filename=files[0].getName();
//lastIndexOf获取指定字符串在某个字符串中最后一次出现的索引
//求出待合并的这些文件列表中每个文件名的公共部分
filename=filename.substring(0,filename.lastIndexOf("-"));
String path=dest+File.separator+filename;
try {
//将filename输出流装饰上缓冲生成bos缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));
//声明一个缓冲输入流
BufferedInputStream bis=null;
byte[] bytes=new byte[1024*1024];
int len=-1;
for(int i=0;i<files.length;i++){
bis=new BufferedInputStream(new FileInputStream(files[i]));
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
bos.flush();
}
bis.close();
}
bos.close();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("开始合并");
//文件列表中的文件顺序不能乱
merge("E:\\test3\\",
new File("E:\\test2\\video.mp4-0.dat"),
new File("E:\\test2\\video.mp4-1.dat"),
new File("E:\\test2\\video.mp4-2.dat"),
new File("E:\\test2\\video.mp4-3.dat"),
new File("E:\\test2\\video.mp4-4.dat"),
new File("E:\\test2\\video.mp4-5.dat"),
new File("E:\\test2\\video.mp4-6.dat"),
new File("E:\\test2\\video.mp4-7.dat")
);
System.out.println("合并成功");
}
}
关键字词:javase,常见字符编码