IO流(字符流:转换流)

来源:互联网 发布:游戏王决斗盘 淘宝 编辑:程序博客网 时间:2024/05/16 12:02

IO流(字符流:转换流)

**字符输入流:**        *public InputStreamReader(InputStream in):默认的编码格式(一般使用这个)*        public InputStreamReader(InputStream in,String charsetName):指定的编码格式        字符输入流= 字节输入流+ 编码表:将字节流转换成字符流        转换流:非常麻烦,本身就比代码书写量大        便捷类:             *FileReader(File file);(建议使用)*    常用的方法:        public int read():读取单个字符        public int read(char[] cbuf, int offset,int length):读取字符数组(读取的是实际长度)**字符输出流:**                    public OutputStreamWriter(OutputStream out):默认编码:采用的格式:gbk格式        public OutputStreamWriter(OutputStream out,Charset cs):指定编码表    有5个写数据的方法:        public void write(int c):写单个字符        public void write(char[] cbuf):写一个字符数组        public abstract void write(char[] cbuf,  int off,int len):字符数组的一部分        public void write(String str):写字符串        public void write(String str, int off,int len):写一部分字符串    flush():刷新该流的缓冲!面试题:close()方法和flush()方法的区别?    close():关闭跟该流相关的资源,并且关闭之前,一定要刷新,防止出现没有写进去的情况,关闭之后不能在写数据了!    flush():刷新缓冲的流,刷新之后,还可以给文件中写数据需求:     将e:\\a.txt文件读取到e:\\b.txt文件中代码:    public static void main(String args[]){         //第一种方法         InputStreamReader isr =new InputStreamReader(new FileInputStream("e:\\a.txt")) ;         OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("e:\\b.txt")) ;         ////第二种方法         FileReader fr = new FileReader("e:\\a.txt");         FileWriter fw = new FileWriter("e:\\b.txt");         //一次读取一个字符         int ch ;         while((ch= isd.read()) != -1){              osw.write(ch);              osw.flush();         }          //一次读取一个字符数组         char[] ch = new char[1024];         int len;         while((len = isd.read(ch))!= -1){             osw.write(ch,0,len);             osw.flush();         }         isd.close();         osw.close();    }

String类的方法:

    public byte[] getBytes(Charset charset) throws UnsupportedEncodingException :将String类型转换成字节数组:编码    把能看懂的编写成了看不懂的数据    public String(byte[] bytes,String charsetName):将byle类型的数组转换成String类型:解码    把看不懂的数据转换成了一个能懂的字符串

举例:谍战片(发送端和接收端)
发送:今天老地方见
能看懂的数据—>看不懂的 : 编码
今—->字节数组—数值—->二进制数据

接收的:    看不懂的升级--->能看懂的字符串 : 译码        二进制数据---->十进制---->数值----->String类型的字符串: 今    今天老地方见! 编码解码的问题很简单:解码编码只要保证他们的编码格式一致,就不会出现乱码的情况!

代码:

public static void main(String args[])throws UnsupportedEncodingException{    String s = "我爱你";    //public byte[] getBytes(Charset charset) throws UnsupportedEncodingException       byte[] bys = s.getBytes("GBK");//默认的就是jbk格式    System.out.println(Arrays.toString(bys));    System.out.println("~~~~~~~~~~~~~");    //public String(byte[] bytes,String charsetName)    String ss = new String(bys,"GBK");    System.out.println(ss);}

结果:

[-50, -46, -80, -82, -60, -29]
~~~~~~~~~
我爱你

原创粉丝点击