day21操作字节数组流,编码解码

翻译 2016年08月30日 19:51:18
/*
用于操作字节数组的流对象
 ByteArrayInputStream
在构造时,需要接收数据源,而数据源是一个字节数组

ByteArrayOutputStream
在构造时,不用定义数组目的,
因为该对象内部已经封装了一个可变长度的字节数组
这就是数据的目的地
可使用 toByteArray() 和 toString() 获取数据。 

因为这两个流对象都是操作数组,并没有使用系统资源
所以,不用进行close关闭

************************************************
在流操作规律

源设备:
键盘System.in,硬盘 FileStream,内存 ArrayStream
目的设备:
控制台System.out,硬盘 FileStream,内存 ArrayStream

用流的思想处理数组数据
*/
class  ByteArrayStream
{
public static void main(String[] args) 
{
//数据源
ByteArrayInputStream bis=new ByteArrayInputStream("ABCDEFD".getByte());

//数据目的
ByteArrayOutputStream bos=new ByteArrayOutputStream();

int by=0;
while ((by=bis.read())!=-1)//du
{
bos.write(by);//xie
}
System.out.println(bos.size());
System.out.println(bos.toString());
}

}

-------------------------------------------------

/*
操作基本数据类型的流对象
DataInputStream与DataOutputStream

*/
class  DataStreamDemo
{
public static void main(String[] args) throws IOException
{
//writeData();
//readData();
writeUTFDemo();

//OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk.txt"),"gbk");

//osw.write("你好");
//osw.close();
}
public static void readUTFDemo()throws IOException
{
DataInputStream dis=new DataInputStream(new FileInputStream("utfdata.txt"));


String s=dis.readUTF();
System.out.println(s);


dis.close();
}
public static void writeUTFDemo()throws IOException
{
DataOutputStream dos=new DataOutputStream(new FileOutputStream("utfdata.txt"));

dos.writerUTF("你好");

dos.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("b="+b);
System.out.println("d="+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();
}
}

-----------------------------------------

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

解码:字节数组变成字符串

String-->byte[]: Str.getBytes(charseName);

byte[]-->String:   new String(byte[],charseName);
*/
import java.util.*;
class  EncodeDemo
{
public static void main(String[] args) 
{
String s="你好";

byte[] b1=s.getBytes("GBK");
System.out.println(Arrays.toString(b1));
//String s1=new String(b1,"GBK");
//System.out.println(s1);

//解码错误的解决方法
String s1=new String(b1,"ISO8859-1");

byte[] b2=s1.getBytes("ISO8859-1");

String s2=new String(b2,"GBK");

System.out.println(s2);
//解码错误解决方法:先再编一次,再解一次
String s1=new String(b1,"UTF-8");

byte[] b3=s1.getBytes("UTF-8");

String s3=new String(b3,"GBK");

System.out.println(s3);
}
}

----------------------------------

/*
字符编码
通过子类转换流完成
InputStreamReader
OutputStreamWriter
在两个对象进行构造的时候加入字符集

*/
import java.io.*;
class  EncodeStream
{
public static void main(String[] args) throws IOException
{
writeText();
}
public static void readText()throws IOException
{
InputStreamReader isr=
new InputStreamReader(new FileInputStream("gbk.txt"),"GBK");

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("utf.txt"),"UTF-8");

osw.write("你好");

osw.close();
}
}

-------------------------------------

import java.io.*;

class  ObjectStreamDemo
{
public static void main(String[] args) throws Exception
{
writeObj();//两对同时使用
readObj();
}
public static void readObj()throws Exception
{
ObjectInputStream ois=
new ObjectInputStream(new FileInputStream("obj.txt"));

Person p=(person)ois.readObject();

System.out.println(p);

ois.close();
}
public static void ()throws IOException
{
ObjectOutputStream oos=
new ObjectOutputStream(new FileOutputStream("obj.txt"));
oos.writeObject(new Person("lisi",25));

oos.close();
}
}

----------------------------------------------

【21】IO流4_序列化,管道,随机,字节数组流,字符编码

7.14  IO流中的其他类 ObjectInputStream与ObjectOutputStream 被操作的对象需要实现Serializable (标记接口);   练习一:ObjectInput...

黑马程序员_java基础篇操作数据的,操作字节数组的,字符编码Day6

黑马程序员_java基础篇操作数据的,操作字节数组的,字符编码Day6      这些类都是IO包中的,重点是编码问题,趁自己还没有忘记赶快记下来。 (一)        对于我们的数据操作流 Dat...

操作基本数据类型,字节数组的流 和 字符编码

操作基本数据类型的流对象  Java代码   import java.io.DataInputStream;   import java.io.DataOutputStrea...

黑马程序员42,基本数据操作流,字节数组操作流,转换流,编码表

----------- android培训、java培训、java学习型技术博客、期待与您交流!------------  黑马程序员42,基本数据操作流,字节数组操作流,转换流,编码表   ...

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

/* ByteArrayStream用于操作字节数组的流对象ByteArrayInputStream : 在构造的时候,需要接收数据源,而且数据源是一个字节数组。 ByteArrayOutputStr...
  • blacop
  • blacop
  • 2016年08月02日 08:25
  • 730

IO流——操作字节数组ByteArrayStream

/* 用于操作字节数组的流对象。 ByteArrayInputStream :在构造的时候,需要接收数据源,。而且数据源是一个字节数组。 ByteArrayOutputStream: 在构造的时候...

黑马程序员——用于操作字节数组的流对象

----------------------    android培训    java培训   期待与您交流!    ----------------------                ...

java--io流-打印流,序列流,操作对象,管道流,RandomAccessFile,操作字节数组

打印流: 该流提供了打印方法,可以将各种数据类型的数据都原样打印。 字节打印流: PrintStream 构造函数可以接收的参数类型: 1,file对象。File 2,字符串路径。Stri...

java-----IO流 操作字节数组的流对象,对象序列化,打印流,随机存储文件,合并流,管道流,操作基本数据类型的流对象

IO流还有其他的方法 以及类 的应用这里总结一些: 于操作字节数组的流对象 /** * 用于操作字节数组的流对象 * 数组流 不会产生任何异常 没有调用底层资源 * ByteAr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:day21操作字节数组流,编码解码
举报原因:
原因补充:

(最多只允许输入30个字)