`
Luob.
  • 浏览: 1571579 次
  • 来自: 上海
社区版块
存档分类
最新评论

java之 21天 (二) 操作基本数据类型,字节数组的流 和 字符编码

    博客分类:
  • Java
阅读更多
操作基本数据类型的流对象

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 * 操作基本数据类型的流对象
 * DataInputStream 和  DataOutputStream
 */
public class DataStream {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//writeData();
		//readDate();
		//writeUTFDemo();
		//writeUTFADemo();
		//readUTFDemo();
		readUTFADemo();
		
	}
	
	//常用  字符编码 读取
	public static void readUTFADemo() throws IOException{
		InputStreamReader isr=new InputStreamReader(new FileInputStream("E:\\utf.txt"),"UTF-8");
		char[] buf=new char[1024];
		int len=isr.read(buf);
		String s=new String(buf,0,len);
		System.out.println(s);
		
	}
	//修改版定UTF  专门读取方法
	public static void readUTFDemo() throws IOException{
		DataInputStream dis=new DataInputStream(new FileInputStream("E:\\utfdata.txt"));
		//DataInputStream dis=new DataInputStream(new FileInputStream("E:\\utf.txt"));  //会报错, EOFEXception
		String s=dis.readUTF();
		System.out.println(s);
		dis.close();
	}
	
	//常用的 utf 写入
	public static void writeUTFADemo() throws IOException{
		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("E:\\utf.txt"),"UTF-8");
		osw.write("你好");
		osw.close();
	}
	
	//修改版定UTF 读取 只能使用专门的指定 读取方法
	public static void writeUTFDemo() throws IOException{
		DataOutputStream dos=new DataOutputStream(new FileOutputStream("E:\\utfdata.txt"));
		dos.writeUTF("你好"); //与机器无关的编码  
		dos.close();
	}
	
	//读取 int boolean double
	public static void readDate() throws IOException{
		DataInputStream dis=new DataInputStream(new FileInputStream("E:\\data.txt"));
		int num=dis.readInt();
		boolean flag=dis.readBoolean();
		Double dd=dis.readDouble();
		System.out.println(num+"\\"+flag+"\\"+dd);
	}
	
	//写入 int boolean double
	public static void writeData() throws IOException{
		DataOutputStream dos=new DataOutputStream(new FileOutputStream("E:\\data.txt"));
		dos.writeInt(234);  //4个字节
		dos.writeBoolean(true);  //1个字节
		dos.writeDouble(89555.455);   //8个字节
		dos.close();
		
	}
}


用于操作字节数组,字符数组 的流对象

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 用于操作字节数组的流对象
 *	ByteArrayInputStream: 在构造的时候 需要接口数据源,而且数据源是一个字节数组
 *  ByteArrayOutputStream: 在构造的时候,不用定义数据目的, 因为该独享中已经内存封装了一个可变长度的字节数组.
 *  这就是 数据目的
 *  
 *  用于操作字符数组的流对象
 *  charArrayReader  
 *  charAarrayWriter
 *  
 *  因为这连个个流对象操作都是数组,并没有使用系统资源,所以不需要进行关闭.
 *  
 *  
 *  在 讲流的操作规律的时候  
 * 源设备: 
 *   键盘:System.in, 硬盘:FileStream  ,内存: ArrayStream
 * 目的设备
 *   键盘:System.out, 硬盘:FileStream ,内存: ArrayStream
 *  
 *  用流的读写思想来操作数组
 *  
 */
public class ByteArrayStream {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//数据源
		ByteArrayInputStream bis=new ByteArrayInputStream("adfsde".getBytes());
		
		ByteArrayOutputStream bos=new ByteArrayOutputStream();
		
		System.out.println(bos.size());  //缓冲的大小
		
		int by=0;
		while((by=bis.read())!=-1){
			bos.write(by);
		}
		System.out.println(bos.size());
		System.out.println(bos.toString());
		
		bos.writeTo(new FileOutputStream("E:\\IOArray.txt"));
		
		
	}

}

字符编码

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

/**
 * 字符编码
 * 字符编码的出现为了方便操作字符
 * 更重要的是加入了编码转换
 * 通过子类转换流来完成
 *   InputStreamReader
 *   OutputStreamWriter
 *   (PrintStream,PrintWriter 也加入编码表) 
 * 在两个对象构造的时候可以加入字符集.
 * 
 * 编码表的由来
 * 计算机只能识别二进制数据,早起由是电信号
 * 为了方便应用计算机,让它可以识别个个国家的文字
 * 就将各个国家的文字用数字来表示,并一对一,形成一张表.
 * 这就是编码表
 * 
 * 常见的编码表
 * ASCII:美国标准信息交换码
 *    用一个字节的7位可以表示.
 * ISO8859-1:拉丁码表.欧洲码表
 *    用一个字节的8位可以表示.
 * GB2312:中国的中文编码表.
 *    6000-7000 多
 * GBK:中国的中文编码表升级.融合了更多的中文文字符号.
 *   上万了
 * Unicode: 国际标准码,融合了多种文字.
 *   所有文字都有两个字节来表示,java语言使用的就是unicode
 * UTF-8:unicode transform format -8:最多三个字节来表示一个字符.一个字节 装不下,采用两个 ,两个不行 三个.
 * 
 * 
 * 
 * 编码: 将字符串 --变成  ---字节数组 
 *     String---byte:  str.getBytes(charsetname);  //默认是 GBk
 * 解码: 将字节数组 ---变成  ---字符串
 *     byte[] ---String:  new  String(byte,charsetname); 默认 gbk
 *
 */
public class EncodeDemo {

	public static void main(String[] args) throws IOException{
		
		//writeText();
		//readText();
		//encodeDemo();
		encodeDemo2();
	}
	public static void encodeDemo2() throws IOException{
		String s="你好";
		byte[] b1=s.getBytes("GBK");
		
		System.out.println(Arrays.toString(b1));
		String s1=new String(b1,"ISO8859-1");//已经是 乱码的文字了
		System.out.println(s1);

		byte[] b2=s1.getBytes("ISO8859-1");
		System.out.println(new String(b2,"GBK"));
	}
	
	public static void encodeDemo1() throws IOException{
		String s="你好";
		byte[] b1=s.getBytes("GBK");
		System.out.println(Arrays.toString(b1));
		
		String s1=new String(b1,"GBK");
		System.out.println(s1);
	}
	
	public static void encodeDemo() throws IOException{
		String s="你好";
		byte[] b1=s.getBytes();
		System.out.println(Arrays.toString(b1));
		
		String s1=new String(b1);
		System.out.println(s1);
	}
	
	
	public static void readText() throws IOException{
		InputStreamReader isr=new InputStreamReader(new FileInputStream("E:\\gbk.txt"));
		
		char [] buf=new char[10];
		int len=isr.read(buf);
		String s=new String(buf,0,len);
		System.out.println(s);
	}
	//默认的使用gbk
	public static void writeText() throws IOException{
		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("E:\\gbk.txt"));
		
		osw.write("你好"); //4个字节:  默认的是 GBK  6个字节  UTF-8  8个自己  修订版UTF
		osw.close();
	}
	
	
}
0
5
分享到:
评论

相关推荐

    21天学通Java-由浅入深

    33 1.9 习题 33 第2章 Java的基本数据类型(精彩视频:38分钟) 34 2.1 数据类型 34 2.1.1 整型 34 2.1.2 浮点型 35 2.1.3 字符型(char) 36 2.1.4 布尔型(boolean) 36 2.2 数据类型间的转换 36 2.2.1 自动转换 ...

    Java面试宝典-经典

    30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String(...

    Java面试宝典2010版

    30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");...

    java面试题大全(2012版)

    30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");...

    最新Java面试宝典pdf版

    30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");...

    Java面试笔试资料大全

    30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");...

    java面试宝典2012

    30、String是最基本的数据类型吗? 24 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 24 32、是否可以继承String类? 25 33、String s = new String("xyz");...

    JAVA面试宝典2010

    30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");...

    Java面试宝典2012新版

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    Java面试宝典2012版

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    二进制数据类型 row 1~2000字节 可变长二进制数据,在具体定义字段的时候必须指明最大长度n long raw 1~2GB 可变长二进制数据 LOB数据类型 clob 1~4GB 只能存储字符数据 nclob 1~4GB 保存本地语言字符集数据 blob...

    mysql官方中文参考手册

    5.10.1. 数据和排序用字符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的字符集 5.10.4. 字符定义数组 5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL...

    MYSQL中文手册

    5.10.1. 数据和排序用字符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的字符集 5.10.4. 字符定义数组 5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 ...

    MySQL 5.1参考手册中文版

    5.10.1. 数据和排序用字符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的字符集 5.10.4. 字符定义数组 5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11...

    MySQL 5.1参考手册

    5.10.1. 数据和排序用字符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的字符集 5.10.4. 字符定义数组 5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL...

Global site tag (gtag.js) - Google Analytics