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

操作基本数据类型的流对象


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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值