Java 中的Unicode与PrintWriter

前面曾介绍过PrintStream,它可以将Java的基本数据类型等数据,直接转换为系统默认编码下对应的字符,再输出至OutputStream中。而这里要介绍的 java.io.PrintWriter在功能上与PrintStream类似,除了接受OutputStream实例作为变量之外,PrintWriter还可以接受Writer对象作为输出的对象。当原先是使用Writer对象在作字符处理,而现在想要套用println()之类的方法时,使用PrintWriter会是比较方便的作法。

下面的例子显示了PrintStream与PrintWriter两个对象在处理相同输出目的时的作法,程序会输出简体中文GB2312编码的文字至指定的文件中。

import java.io.*;
import java.util.*;

public class StreamWriterDemo
{
	public static void main(String[] args) 
	{
		try
		{
			 // 「简体中文」四个字的 GB2312 编码
            byte[] sim = {(byte)0xbc, (byte)0xf2, 
                          (byte)0xcc, (byte)0xe5,
                          (byte)0xd6, (byte)0xd0,
                          (byte)0xce, (byte)0xc4};
			//数组作为流来源
			ByteArrayInputStream byteArrayInputStream = 
				new ByteArrayInputStream(sim);
			InputStreamReader inputStreamReader = 
				new InputStreamReader(byteArrayInputStream,"GB2312");

			//PrintWriter可以接受Writer实例作为变量 
			PrintWriter printWriter = 
				 new PrintWriter(
				     new OutputStreamWriter(
				            new FileOutputStream(args[0]),"GB2312"));

			int in = 0;

			printWriter.print("PrintWriter: ");
			//写入数组内容
			while((in = inputStreamReader.read())!=-1)
			{
				printWriter.print((char)in);
			}

			printWriter.println();

			printWriter.close();
			byteArrayInputStream.reset();

            //PrintStream接受OutputStream实例作为变量
			PrintStream printStream = 
				new PrintStream(new FileOutputStream(args[0],true),true,"GB2312");
			printStream.print("PrintStream: ");
			//写入数组内容
			while((in = inputStreamReader.read()) != -1)
			{
				printStream.print((char)in);
				System.out.println(Integer.toHexString(in));
			}

            printStream.println();

			inputStreamReader.close();
			printStream.close();
				              
		}
		catch(ArrayIndexOutOfBoundsException e)
		{
			System.out.println("没有指定文件");
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
	}
}
运行如下命令 java StreamWriterDemo Output.txt 屏幕上会输出:

7b80
      4f53
      4e2d
     6587

"简体中文" 对应的Unicode 编码值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值