13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

一文让你读懂JAVA.IO、字符编码

 1 JAVA.IO字节流

inputstream.png

 
 
 
 
  1. //用ByteArrayOutputStream暂时缓存来自其他渠道的数据 
  2. ByteArrayOutputStream data = new ByteArrayOutputStream(1024); //1024字节大小的缓存区 
  3. data.write(System.in.read()); // 暂存用户输入数据 
  4.  
  5. //将data转为ByteArrayInputStream 
  6. ByteArrayInputStream in = new ByteArrayInputStream(data.toByteArray()); 

 
 
 
 
  1. //java对象的写入 
  2. FileOutputStream fileStream = new FileOutputStream("example.txt"); 
  3. ObjectOutputStream out = new ObjectOutputStream(fileStream); 
  4. Example example = new Example(); 
  5. out.writeObject(example); 
  6.  
  7. //java对象的读取 
  8. FileInputStream fileStream = new FileInputStream("example.txt"); 
  9. ObjectInputStream in = new ObjectInputStream(fileStream); 
  10. Example = (Example) in.readObject(); 
 
 
 
 
  1. // 创建一个发送者对象 
  2. Sender sender = new Sender(); // 创建一个接收者对象 
  3. Receiver receiver = new Receiver(); // 获取输出管道流 
  4. // 获取输入输出管道流 
  5. PipedOutputStream outputStream = sender.getOutputStream();  
  6. PipedInputStream inputStream = receiver.getInputStream(); 
  7. // 链接两个管道,这一步很重要,把输入流和输出流联通起来   
  8. outputStream.connect(inputStream); 
  9. sender.start();// 启动发送者线程 
  10. receiver.start();// 启动接收者线程 
 
 
 
 
  1. InputStream in1 = new FileInputStream("example1.txt"); 
  2. InputStream in2 = new FileInputStream("example2.txt"); 
  3. SequenceInputStream sequenceInputStream = new SequenceInputStream(in1, in2); 
  4. //数据读取 
  5. int data = sequenceInputStream.read(); 
 
 
 
 
  1. ByteArrayOutputStream out = new ByteArrayOutputStream(2014); 
  2. //数据写入,使用DataOutputStream装饰一个InputStream 
  3. //使用InputStream具有对基本数据的处理能力 
  4. DataOutputStream dataOut = new DataOutputStream(out); 
  5. dataOut.writeDouble(1.0); 
  6. //数据读取 
  7. ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); 
  8. DataInputStream dataIn = new DataInputStream(in); 
  9. Double data = dataIn.readDouble(); 

 2 JAVA.IO字符流

21.png 

 
 
 
 
  1. //InputStream转为Reader 
  2. InputStream inputStream = new ByteArrayInputStream("程序".getBytes()); 
  3. InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); 
  4. //OutputStream转为Writer 
  5. OutputStream out = new FileOutputStream("example.txt"); 
  6. OutputStreamWriter writer = new OutputStreamWriter(out); 
  7. //以字符为单位读写 
  8. writer.write(reader.read(new char[2])); 

3 乱码问题和字符流

 
 
 
 
  1. ByteArrayInputStream in = new ByteArrayInputStream("程序大法好".getBytes()); 
  2. byte[] buf = new byte[2]; //读取流的两个字节 
  3. in.read(buf); //读取数据 
  4. System.out.println(new String(buf)); //乱码 
  5. ---result----  
  6. �  //乱码 

 
 
 
 
  1. InputStreamReader reader =  
  2.       new InputStreamReader(inputStream, StandardCharsets.UTF_8); 

4 字符集和字符编码的概念区分

范围 Unicode(Binary) UTF-8编码(Binary) UTF-8编码byte长度 U+0000~U+007F 00000000 00000000 00000000 0XXXXXXX 0XXXXXX 1 U+0080~U+07FF 00000000 00000000 00000YYY YYXXXXXX 110YYYYY 10XXXXXX 2 U+0800~U+FFFF 00000000 00000000 ZZZZYYYY YYXXXXXX 1110ZZZZ 10YYYYYY 10XXXXXX 3 U+010000~U+10FFFF 00000000 000AAAZZ ZZZZYYYY YYXXXXXX 11110AAA 10ZZZZZZ 10YYYYYY 10XXXXXX 4

 
 
 
 
  1. System.out.println(Charset.defaultCharset()); //输出java默认编码 
  2. for (byte item : "程序".getBytes(StandardCharsets.UTF_16)) { 
  3.     System.out.print("[" + item + "]"); 
  4. System.out.println(""); 
  5. for (byte item : "程序".getBytes(StandardCharsets.UTF_8)) { 
  6.     System.out.print("[" + item + "]"); 
  7. ----result---- 
  8. UTF-8       //java默认编码UTF-8 
  9. [-2][-1][122][11][94][-113] //UTF_16:6个字节? 
  10. [-25][-88][-117][-27][-70][-113] //UTF_8:6个字节 正常 
 
 
 
 
  1. for (byte item : "程".getBytes(StandardCharsets.UTF_16)) { 
  2.     System.out.print("[" + item + "]"); 
  3. ---result-- 
  4. [-2][-1][122][11] 

 【编辑推荐】

  1. Python虽好,但请不要盲目将它用于每一个项目!
  2. 红帽开放混合云 助力企业成为数字原生企业
  3. 分析鸿蒙系统helloworld程序是如何被调用,SYS_RUN做什么事情
  4. 5G为何突然间就“不火”了?
  5. 新方向、新功能:Python3.9 完整版面世了

新闻标题:一文让你读懂JAVA.IO、字符编码
本文网址:http://cdbrznjsb.com/article/dpeceih.html

其他资讯

让你的专属顾问为你服务