文档章节

Java学习日志(21-2-IO流-基本数据类型与字节数组对象与、编码解码)

Almon
 Almon
发布于 2016/10/10 16:34
字数 1054
阅读 13
收藏 0

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

/* 
可以用于操作基本数据类型数据的流对象
 */
import java.io.*;
class DataStreamDemo{
	public static void main(String[] args)throws IOException{
		// writeData();
		// readData();
		// writeUTFDemo();
		// OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("utf.txt"),"utf-8");
		// osw.write("你好");
		// osw.close();
		readUTFDemo();
	}
	
	public static void writeUTFDemo()throws IOException{
		DataOutputStream dos=new DataOutputStream(new FileOutputStream("utfdate.txt"));
		dos.writeUTF("你好");
		dos.close();
	}
	public static void readUTFDemo()throws IOException{
		DataInputStream dis=new DataInputStream(new FileInputStream("utfdate.txt"));
		String s=dis.readUTF();
		System.out.println(s);
		dis.close();
	}
	
	public static void readData()throws IOException{
		DataInputStream dis=new DataInputStream(new FileInputStream("data.txt"));
		int num=dis.readInt();
		boolean b=dis.readBoolean();
		double d=dis.readDouble();
		System.out.println("num:"+num);
		System.out.println("boolean:"+b);
		System.out.println("double:"+d);
		dis.close();
	}
	public static void writeData()throws IOException{
		DataOutputStream dos=new DataOutputStream(new FileOutputStream("data.txt"));
		
		dos.writeInt(234);
		dos.writeBoolean(true);
		dos.writeDouble(9887.543);
		dos.close();
	}
}

操作字节数组ByteArrayStream

/* 
ByteArrayInputStream:在构造的时候需要接收数据源,而且必须是一个字节数组
ByteArrayOutputStream:在构造的时候不用定义数据目的,内部已经封装了可变长度的字节数组
这两个流对象都操作的数组并没有使用系统资源,不用进行关闭

输出录入设备中的内存属于ArrayStream
 */
 
 import java.io.*;
 class ByteArrayStream{
	  public static void main(String[] args){
		  // 数据源
		  ByteArrayInputStream bis=new ByteArrayInputStream("ABCDEFD".getBytes());
		  // 数据目的
		  ByteArrayOutputStream bos=new ByteArrayOutputStream();
		  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("a.txt")
	  }
 }

转换流的字符编码

    ASCII:美国标准信息交换码

                用一个字节的7位可以表示,识别中文

    ISO8859-1:拉丁码表,欧洲码表

                用一个字节的8位表示

    GB2312:中文编码表

    GBK:中文编码表升级

    Unicode:国际标准码,融合多种文字

                所有文字都用两个字节来表示,Java所用

    UTF-8:最多用三个字节来表示一个字符

import java.io.*;
class EncodeStream{
	public static void main(String[] args)throws IOException{
		// writeText();
		readText();
	}
	public static void readText()throws IOException{
		InputStreamReader isr=new InputStreamReader(new FileInputStream("gbk.txt"),"utf-8");
		char[]buf=new char[10];
		int len=isr.read(buf);
		String str=new String(buf,0,len);
		System.out.println(str);
		isr.close();
	}
	public static void writeText()throws IOException{
		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk.txt"),"UTF-8");
		osw.write("你好");
		osw.close();
	}
}

字符编码/解码

/* 
编码:字符串变成字节数组

解码:字节数组变成字符串
String-->byte[];	str.getBytes();

byte[]-->String;	new String(byte[]);
 */
 import java.util.*;
 class EncodeDemo{
	 public static void main(String[] args)throws Exception{
		 String s="你好";
		 // 编码
		 byte[]b1=s.getBytes("gbk");
		 System.out.println(Arrays.toString(b1));
		 // 解码 
		 String s1=new String(b1,"ISO8859-1");//输出乱码
		 System.out.println("s1="+s1);
		 // 对其进行编码
		 byte[]b2=s1.getBytes("ISO8859-1");
		 System.out.println(Arrays.toString(b2));
		 String s2=new String(b2,"gbk");
		 System.out.println("s2="+s2);
	 }
 }
 

字符编码

/* 
联通二字GBK码与UTF-8一致
 */
class EncodeDemo2{
	public static void main(String[] args)throws Exception{
		String s="联通";
		byte[] by=s.getBytes("gbk");
		for(byte b:by){
			// 转码为二进制
			System.out.println(Integer.toBinaryString(b&255));
		}
	}
}

练习

/* 
有五个学生,每个学生有3门课的成绩
从键盘输入以上数据(姓名、三门课成句)
输入格式:zhangsan,30,40,60计算出总成绩
并把学生信息和计算出的总分数高低顺序存放在“stud.txt”中

1.描述学生对象
2.定义一个可操作学生对象的工具类

思想
1.通过获取键盘录入一行数据,并将改行中的信息取出封装成学生对象
2.因为学生有很多,那么需要储存,使用到集合
  需要排序,采用TreeSet
3.将集合的信息写入文件
 */
 import java.util.*;
 import java.io.*;
 class Student implements Comparable<Student>{
	 private String name;
	 private int ma,cn,en;
	 private int sum;
	 Student(String name,int ma,int cn,int en){
		 this.name=name;
		 this.ma=ma;
		 this.cn=cn;
		 this.en=en;
		 sum=en+ma+en;
	 }
	 
	 public int compareTo(Student s){
		 int num=new Integer(this.sum).compareTo(new Integer(s.sum));
		 if(num==0){
			 return this.name.compareTo(s.name);
		 }
		 return num;
	 }
	 
	 public String getName(){
		 return name;
	 }
	 public int getSum(){
		 return sum;
	 }
	 public int hashCode(){
		 return name.hashCode()+sum*78;
	 }
	 public boolean equals(Object obj){
		 if(!(obj instanceof Student)){
			 throw new ClassCastException("类型不匹配!");
		 }
		 Student s=(Student)obj;
		 return this.name.equals(s.name)&&this.sum==s.sum;
	 }
	 public String toString(){
		 return "student["+name+","+ma+","+cn+","+en+"]";
	 }
 }
 
 class StudentInfoTool{
	 public static Set<Student> getStudents()throws IOException{
		 return getStudents(null);
	 }
	
	 public static Set<Student> getStudents(Compatator<Student>cmp)throws IOException{
		 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		 String line=null;
		 Set<Student>stus=null;
		 if(cmp==null){
			 stus=new TreeSet<Student>();
		 }
		 else{
			 stus=new TreeSet<Student>(cmp);
		 }
		 while((line=bufr.readLine())!=null){
			 if("over".equals(line)){
				 break;
			 }
			 String[]info=line.split(",");
			 Student stu=new Student(info[0],Integer.parseInt(info[1]),Integer.parseInt(info[2]),Integer.parseInt(info[3]));
			 stus.add(stu);
		 }
		 bufr.close();
		 return stus;
	 }
	 public static void write2File(Set<Student> stus)throws IOException{
		 BufferedWriter bufw=new BufferedWriter(new FileWriter("stuinfo.txt"));
		 for(Student stu:stus){
			 bufw.write(stu.toString()+"\t");
			 bufw.write(stu.getSum()+" ");
			 bufw.newLine();
			 bufw.flush();
		 }
		 bufw.close();
	 }
 }
 class StudentInfoTest{
	 public static void main(String[] args)throws IOException{
		 Comparator<Student>cmp=Collections.reverseOrder();
		 Set<Student>stus=StudentInfoTool.getStudents();
		 StudentInfoTool.write2File(stus);
	 }
 }

 

© 著作权归作者所有

Almon
粉丝 2
博文 78
码字总数 55788
作品 0
江北
私信 提问
JAVASE之JAVAI/O流篇

一 Java IO IO流用来处理设备之间的数据传输。 Java程序中,对于数据的输入/输出操作以”流(stream)” 的方式进行。 java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标...

刘信坚
2018/07/30
0
0
【Java IO】初识字节流和字符流

说到IO,在我们工作中是经常遇到的,比如文件的上传、网络的数据传输、系统的日志记录等,俯拾皆是。Java里面是怎么实现IO的,今天我们一起学习下。 Java种IO是通过流的方式实现的,流可以理...

火拳-艾斯
04/12
16
0
JAVA基础再回首(二十一)——递归、IO流概述、字节流写数据、读取数据、复制数据、字节缓冲流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52433489 JAVA基础再回首(二十一)——递归、IO流概述、字节流写数据、读取数据、复...

Aduroidpc
2016/09/04
0
0
java学习之I/O流

初学者在刚开始学习Java的时候总是会烟花缭乱,不知道怎么去选择,IO提供了两个包java.io,java.nio包,笔者在这里旨在从宏观上把握,整理了一个关于java IO流的一个框架,以期对后续学习有所...

牵着蜗牛去西藏
2015/07/16
557
0
关于Java编程基础学习输入输出IO的问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
2018/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
27分钟前
6
0
wildfly(JBoss AS)应用服务器快速入门

什么是wildfly JBoss AS 从8版本起名为wildfly。Wildfly是一个开源的基于JavaEE的轻量级应用服务器。可以在任何商业应用中免费使用。 WildFly是一个灵活的、轻量的、强大管理能力的应用程序服...

程序新视界
52分钟前
5
0
Java集合类常见面试知识点总结

Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾。 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/column/details/21930...

Java技术江湖
55分钟前
6
0
怎么用for循环打出爱心

先上效果图: 这是用*组成的爱心,下面讲讲思路: 首先这个图形可以拆分成三部分:第一部分是上面三行的两个梯形,第二部分是中间三行的长方形,第三部分是最下面的倒三角形。 其实图形拆分好...

INEVITABLE
今天
4
0
用HttpUrlConnection伪造成HttpClient

https://www.jianshu.com/p/27ad06cc39d2

shzwork
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部