java jvm defaultCharset问题

一、问题描述
在写代码的时候,读取字节流的时候,一般需要转化成 字符串,此时就涉及到编码问题。
一般文件是用啥 编码 存的,取的时候就用 此编码读取。  在写读的时候,一般建议指定编码。
BufferedReader br = new BufferedReader(new InputStreamReader(is));最好写成
BufferedReader br = new BufferedReader(new InputStreamReader(is,encoding));
encoding一般需要猜测文件的编码。嘿嘿。。。。
【如果没有指定编码,系统是如何读取编码的呢?】
defaultCharset是默认编码,依赖于本地。(
 可以如此来指定:-Dfile.encoding=GBK)
【如果 也没有用-Dfile.encoding指定呢?】
则会依赖于locate

系统的代码如下:【请用openjdk查看Charset类,大约580行】
  private static volatile Charset defaultCharset;

    /**
     * Returns the default charset of this Java virtual machine.
     *
     * <p> The default charset is determined during virtual-machine startup and
     * typically depends upon the locale and charset of the underlying
     * operating system.
     *
     * @return  A charset object for the default charset
     *
     * @since 1.5
     */
    public static Charset defaultCharset() {
        if (defaultCharset == null) {
            synchronized (Charset.class) {
                String csn = AccessController.doPrivileged(
                    new GetPropertyAction("file.encoding"));
                Charset cs = lookup(csn);
                if (cs != null)
                    defaultCharset = cs;
                else
                    defaultCharset = forName("UTF-8");
            }
        }
        return defaultCharset;
    }
【我们经常使用IDE eclipse ,对defaultCharset有啥影响呢?】
 此是以General ->Workspace中的text File encoding 可以设置全部的编码。
 单个文件可以单独设置。  当在eclipse运行代码时,是以 运行的此文件为准的。
二、总结
1、-Dfile.encoding=GBK 指定defaultCharset。
2、如果没有指定,系统会根据时区、操作系统的相关信息来获取。
3、eclipse中需要注意文件的编码。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值