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

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面试题最全集,JAVA面试题最全集

    Java中有八种基本数据类型,分为两类:整数类型(byte、short、int、long)和浮点类型(float、double),此外还包括布尔类型(boolean)和字符类型(char)。而`String`不是基本数据类型,它是Java中的一个类,用来...

    2014年Java最全面试题以及答案.

    要正确处理汉字等多字节字符,可以使用String类的getBytes方法配合指定的字符编码,例如UTF-8或GBK来处理字符串的字节表示。 15. 打印昨天的当前时刻。 可以通过Calendar类获取当前时间,然后进行相应的减法操作来...

    JAVA面试题全集

    - 将 GB2312 编码的字符串转换为 ISO-8859-1 编码:使用 `String.getBytes("GB2312")` 转为字节数组,然后使用 `new String(bytes, "ISO-8859-1")` 转换回字符串。 9. **Java中访问数据库** - 使用 JDBC 连接...

    JAVA面试题从基础到高级篇.doc

    27. Java流处理输入输出,分为字符流和字节流,有缓冲和非缓冲之分。 28. AWT是原始的图形用户界面库,Swing提供了更多组件和现代UI特性。 29. Java事件处理模式包括监听器、适配器等。 30. Applet安全权限受限,可...

    JAVA面试题目

    需要先将GB2312字符串转换为字节序列,然后再从字节序列转换为ISO-8859-1编码的字符串。 以上知识点是根据提供的文件内容整理出的Java面试常见的知识点,涵盖了Java基础、集合、异常处理、内部类、多线程、垃圾...

    java面试笔试题用到的

    - Java流提供了一种处理数据的方式,分为字节流和字符流。 #### 20. AWT与Swing的主要区别 - **Swing**具有更好的外观定制能力和更高的跨平台兼容性。 #### 21. 事件处理模式 - 通常使用监听器模式,注册监听器...

    Java面试题整理精华

    堆栈是一种遵循先进后出(LIFO)原则的数据结构,可以用`Array`或`LinkedList`来实现,提供`push`和`pop`等基本操作。 #### 48. 集合的作用是什么? 集合用于存储一组对象,提供了灵活的添加、删除、查找等操作,是...

    Java企业面试题整理及答案

    反射机制允许在运行时访问类的信息和操作对象,可以获取类的属性、方法等元数据,并动态创建和调用对象。 **20. 类的返射机制中的包及核心类** 反射相关的包主要是 `java.lang.reflect`,核心类包括 `Class`、`...

    Java面试宝典-经典

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

    java经典面试题.doc

    使用`new String(bytes, "ISO-8859-1")`方法,其中`bytes`是按照GB2312编码的字节数组。 #### 32. Strings=newString("xyz");创建了几个StringObject? 创建了一个`String`对象。 #### 33. float型floatf=3.4是否...

    2021-2022计算机二级等级考试试题及答案No.2740.docx

    【知识点详解】 ...以上内容涵盖了计算机二级等级考试中涉及的多个知识点,包括数据类型、HTML编码、数据库管理、操作系统、编程语言语法、软件调试、排序算法、文件操作、数据库设计以及数据库管理系统等方面。

    java基础知识

    #### 第19天~第21天:Java中的各种集合容器使用 1. **集合框架概述**: - 集合的定义与分类:List、Set、Map。 - Collection与Map接口的区别。 - Iterator与ListIterator迭代器。 2. **常用集合类**: - List...

    Java面试题以及答案

    - 或者使用`getBytes(charsetName)`方法将字符串转换为指定编码的字节数组。 #### 32. Strings=newString("xyz");创建了几个StringObject? - 这样创建了一个`String`对象,并将其引用赋值给`Strings`变量。 - 字符...

    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面试题_(精典).doc

    使用`new String(bytes, "ISO-8859-1")`将GB2312编码的字节数组转换为ISO-8859-1编码的字符串。 #### 32. Strings=newString("xyz")创建了几个StringObject? 只创建了一个`String`对象,因为字符串常量池中已经...

    2021-2022计算机二级等级考试试题及答案No.13502.docx

    - **基本数据类型与引用类型**:在编程语言中,数据类型分为基本类型和引用类型。基本类型如整型、浮点型等,而引用类型则指向内存中的对象。 - **引用类型的示例**:`string`是一种引用类型,它指向内存中的字符串...

    2021-2022计算机二级等级考试试题及答案No.18074.docx

    1. `InputStreamReader` 类是用来将字节流转换为字符流的,它用于处理字符编码。 2. 在 Word 中,如果想要设置文字的边框,可以在“格式”菜单中选择“边框和底纹”选项。 3. 用 SQL 查询数据库时,查找15天前参加...

    java面试宝典2012

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

Global site tag (gtag.js) - Google Analytics