zoukankan      html  css  js  c++  java
  • 字符流

    字符流与字节流区别

      字符流 处理文本文档中文问题 字节流解决不了中文文档的处理 不可以处理图片 视频等的复制

      字节流 除了文本文档其他都用 

    字符编码表

      1.ascii: 一个字节中的7位就可以表示。对应的字节都是正数。0-xxxxxxx

      2.iso-8859-1:拉丁码表 latin,用了一个字节用的8位。1-xxxxxxx  负数  

      3.GBK:目前最常用的中文码表,2万的中文和符号。用两个字节表示,其中的一部分文字,第一个字节开头是1,第二字节开头是0        uft-8 三个字节 基于unicode

      4.unicode:国际标准码表:无论是什么文字,都用两个字节存储

      5.能识别中文的码表:GBK、UTF-8;正因为识别中文码表不唯一,涉及到了编码解码问题。

      对于我们开发而言;常见的编码 GBK  UTF-8  ISO-8859-1

        文字--->(数字) :编码。 “abc”.getBytes()  byte[]

        (数字)--->文字  : 解码。 byte[] b={97,98,99}  new String(b,0,len)

      注意: Java中的char类型用的就是这个码表。char c = 'a';占两个字节。  Java中的字符串是按照系统默认码表来解析的。简体中文版 字符串默认的码表是GBK

    字符输入流Reader

       read():读取单个字符并返回

        read(char[]):将数据读取到数组中,并返回读取的个数。

    FileReader

      

    public class Demo1 {
    	public static void main(String[] args) throws IOException {
    		//明确数据源
    		FileReader fr=new FileReader("D:\demo1018\hello.txt");
    		//都一个字符
    		/*int len=fr.read();
    		System.out.println((char)len);*/
    		//一个字符一个字符的读
    		int len=0;
    		while ((len=fr.read())!=-1) {
    			System.out.print((char)len);
    		}
    		//释放资源
    		fr.close();
    	}
    }
    package com.oracle.demo02;
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Demo2 {
    
    	public static void main(String[] args) throws IOException {
    		//明确数据源
    		FileReader fr=new FileReader("D:\demo1018\hello.txt");
    		//读一个字符
    		char ch[]=new char[1024];
    		int len=0;
    		while ((len=fr.read(ch))!=-1) {
    			System.out.print(new String(ch,0,len));
    			System.out.println();
    			System.out.println(len);
    		}
    		//释放资源
    		fr.close();
    
    	}
    
    }
    

    字符输出流Writer

      FileWriter 写入字符到文件中,先进行流的刷新,再进行流的关闭

      

    package com.oracle.demo02;
    
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Demo3 {
    	public static void main(String[] args) throws IOException {
    		//明确目的地
    		//FileWriter fw=new FileWriter("D:\demo1018\nihao.txt",true);
    		FileWriter fw=new FileWriter("D:\demo1018\nihao.txt",true);
    		//写入字符
    		fw.write(100);
    		fw.flush();
    		//写一个字符数组
    		fw.write("
    你好123".toCharArray());
    		fw.flush();
    		//写入个字符串
    		fw.write("新年好,123",1,2);
    		fw.flush();
    		/*fw.flush();
    		//写一个字符数组
    		char ch[]={'在','那','林','4','5','7','w'};
    		fw.write(ch,0,3);
    		fw.flush();
    		//写入个字符串
    		fw.write("你好Java,1233",0,6);
    		fw.flush();*/
    		//释放资源
    		fw.close();
    	}
    }
    

    flush()和close()的区别

      flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用

      close():关闭资源,关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以再使用。

      如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭

    复制文本文件

    package com.oracle.demo02;
    
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Copy {
    
    	public static void main(String[] args) throws IOException {
    		//明确目的地(复制到那里去)
    		FileWriter fw=new FileWriter("D:\demo1018\a\nihao2.txt");
    		//明确数据源(从哪赋值)
    		FileReader fr=new FileReader("D:\demo1018\nihao.txt");
    		//一个字符一个字符复制
    		/*int len=0;
    		while ((len=fr.read())!=-1) {
    			fw.write(len);
    			fw.flush();
    		}*/
    		//一个字符数组一个字符数组复制
    		char ch[]=new char[1024];
    		int len=0;
    		while ((len=fr.read(ch))!=-1) {
    			fw.write(ch,0,len);
    			fw.flush();
    		}
    		//释放资源
    		fw.close();
    		fr.close();
    
    	}
    
    }
    

      

  • 相关阅读:
    Swift 泛型和闭包结合使用
    Swift中避免在多个文件中重复import相同的第三方包
    iOS AVAudioPlayer播放音频时声音太小
    python中装饰器的原理以及实现,
    python-网易云简单爬虫
    python模拟SQL语句操作文件
    python学习第二天-基本数据类型常用方法
    python学习第一天-语法学习
    iOS 出现错误reason: image not found的解决方案
    Swift as as!和as?的区别
  • 原文地址:https://www.cnblogs.com/zqy6666/p/12295704.html
Copyright © 2011-2022 走看看