2018.4.10-IO流部分

本文详细介绍了Java中的IO流操作,包括DataInputStream和DataOutputStream的基本使用方法,如何进行数据的读写,以及特殊情况下如何处理编码问题。同时,还探讨了ByteArrayInputStream和ByteArrayOutputStream在处理数组时的应用。

DataInputSream和DataOutputSream

//出现原因:流写入只写入最后8位,为了操作方便,其产生

DataOutputStream dos = new DataOutputStream(new FileOutputStream(""));//写入流

//示例方法
dos.writeInt(234);//写入一个整数
dos.writeBoolean(true);//写入一个Boolean类型值

dos.writeDouble(9887.543);//写入一个浮点数类型
dos.writeUTF("");//用其写的必须要用readUTF读出来

DataInputStream dis = new DataInputStream(new FileInputStream(""));//读取流
 
  int num = dis.readInt();
  boolean b = dis.readBoolean();
  double d = dis.readDouble();

ByteArrayInputStream ByteArrayOutputStream
//主要是为了用操作流的思想操作数组
//因为没有调用底层,不需要close


ByteArrayInputStream bis = new ByteArrayInputStream("asdf".getBytes())

ByteArrayOutputStream bos = new ByteArrayOutputStream();
bos.size()//获取数组中长度
bos.toString()//将数组中的元素以字符串的方式打印
bos.writeTo(out);//将数组中元素写入一个流中

//而CharArrayReader,CharArrayWriter,StringReader,StringWriter操作方式与其基本相同

EncodeStream
//常见编码表 GBK:两个字节表示一个字符

                    UTF-8:可用三个字节表示一个字符
                    
//java存储文件时,底层需要根据编码表将其转换成01存储到硬盘中
        

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(""),"code");//字符流转换成为字节流桥梁
InputStreamReader isr = new InputStreamReader(new FileInputStream(""),"code");

解码编码
编码:字符串转换成为数组
String s = "你好";
byte[] b1 = s.getBytes("GBK");
System.out.println(Arrays.toString(b1));
 

解码:字符数组转换成为字符串

String s1= new String(b1,"GBK");

编码用GBK时,可用iso8859-1解码,再用iso8859-1编码,然后用GBK解码,可得到原样信息,因为iso8859-1不识别中文,会返回原样编码,(应用领域:cookie)//但不可以用utf-8因为其也识别中文,当其解码失败时,会到未知编码区,返回相似编码
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);

特殊情况-联通
//当文件中联通开头时,会发现出现乱码,因为这是联通符合一种特殊情况,满足110开头的utf-8编码,所以自动以utf-8去解码
//需要解决这问题,只需要在联通前加一个汉字即可。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值