——<ahref="" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ——-
黑马程序员——26,
DataInputStream,DataOutputStream,
ByteArrayInputStream,ByteArrayOutputStream,
InputStreamReader,OutputStreamWriter,编码表
/*
DataInputStream和DataOutputStream
可以更加操作基本数据类型的流
注意这里是Data不是Date!
*/
import java.io.*;class Ioliou31{public static void main(String[] args)throws IOException{UTFDemo() ;// method();}public static void method() throws IOException{File f=new File("f:\\科学.txt"); //封装目的文件为对象FileOutputStreamfos=new FileOutputStream(f);//关联目的文件的流DataOutputStreamdos=new DataOutputStream(fos);//再用专门操作基本类型数据的流的构造函数接收//以下注意写入的格式//不同的写入格式是按照不同位数写入的dos.writeInt(56);dos.writeBoolean(false);dos.writeDouble(15.24);/* */FileInputStream fis=new FileInputStream(f);DataInputStream dis=new DataInputStream (fis);//读取的时候注意要按照顺序读取,以及读取的格式//不同的读取格式是按照不同的位数来读取的int i =dis.readInt();boolean bo=dis.readBoolean();double dou=dis.readDouble();soc(i+"—"+bo+"—"+dou);//特别注意:什么格式写入的就用什么格式读取出来dos.close();dis.close();}public static void UTFDemo() throws IOException{File f=new File("f:\\科学.txt"); //封装目的文件为对象FileOutputStreamfos=new FileOutputStream(f);//关联目的文件的流DataOutputStreamdos=new DataOutputStream(fos);dos.writeUTF("这是");//四个字节组成一个字符,一共八个字节FileInputStream fis=new FileInputStream(f);DataInputStream dis=new DataInputStream (fis);soc(dis.readUTF());//readUTF方法返回的是字符串,用什么格式写就要用什么格式读取}public static void soc(Object obj){System.out.println(obj);}}
————————分割线————————
/*
操作字节数组的流(内部封装长度可变的字节数组)
ByteArrayInputStream
ByteArrayOutputStream
直接把字节数组传给其ByteArrayInputStream的构造函数,
传进来的字节数组就是源
源设备:
键盘System.in 硬盘FileStream 内存ArrayStream
目的设备
控制台System.out 硬盘FileStream 内存ArrayStream
这两个流没有调用底层资源,不用关闭close
另外,还有ByteArrayReader和ByteArrayWriter用法也是和上面两者类似。
ByteArrayReader构造函数传入的是字符数组。
*/
import java.io.*; class Ioliou32{public static void main(String[] args) throws IOException{ByteArrayInputStream bais=new ByteArrayInputStream("哦奥额".getBytes());ByteArrayOutputStream baos=new ByteArrayOutputStream();int i=0;while((i=bais.read())!=-1){baos.write(i);}File f=new File("f:\\可乐可乐.java");FileOutputStream fos=new FileOutputStream(f);baos.writeTo(fos); //直接写入字节输出流中}public static void soc(Object obj){System.out.println(obj);}}
——————分割线——————
/*
转换流与编码表:
转换流InputStreamReader和OutputStreamWriter
编码表:
ASCII美国标准信息交换码,用一个字节的7位表示
ISO8859-1 欧洲码表,拉丁码表不识别中文字符,用一个字节8位表示
GB2312 中国中文编码表
GBK 中国中文编码表升级版,两个字节表示一个字符
Unicode 国际标准码,java使用的编码表
UTF-8 最多三个字节表示一个字符
*/
import java.io.*;class Ioliou33{publicstatic void main(String[] args) throws IOException{// write();read();}public static void write() throws IOException{File f=new File("f:\\楼宇.txt");FileOutputStream fos=new FileOutputStream(f);OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");//要加上编码表版本osw.write("动手打人了");osw.close();/*虽然写入之后我们代开f:\\楼宇.java文件看到的依旧是字符,但是本质上文件存储的是编码表上对应的数字,只不过按照指定编码表兑换成字符而已。*/}public static void read() throws IOException{File f=new File("f:\\楼宇.txt");FileInputStream fis=new FileInputStream(f);InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//编码表版本要对应上/*读取的时候也是按照存储的数字再按照指定的编码表找出对应的字符*/char[] ch=new char[20];int i=0;while ((i=isr.read(ch))!=-1){soc(new String(ch,0,i));}isr.close();}public static void soc(Object obj){System.out.println(obj);}}
——————分割线——————
/*
编码与解码:
常用编码表gbk,utf-8,ISO8859-1
如你想要拥有完美无暇的友谊,可能一辈子找不到朋友