zoukankan      html  css  js  c++  java
  • String.getBytes(),源码之下,了无秘密

     @Deprecated
        public void getBytes(int srcBegin, int srcEnd, byte dst[], int dstBegin) {
            if (srcBegin < 0) {
                throw new StringIndexOutOfBoundsException(srcBegin);
            }
            if (srcEnd > value.length) {
                throw new StringIndexOutOfBoundsException(srcEnd);
            }
            if (srcBegin > srcEnd) {
                throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
            }
            int j = dstBegin;
            int n = srcEnd;
            int i = srcBegin;
            char[] val = value;   /* avoid getfield opcode */
    
            while (i < n) {
                dst[j++] = (byte)val[i++];
            }
        }
    
        /**
         * Encodes this {@code String} into a sequence of bytes using the named
         * charset, storing the result into a new byte array.
         *
         * <p> The behavior of this method when this string cannot be encoded in
         * the given charset is unspecified.  The {@link
         * java.nio.charset.CharsetEncoder} class should be used when more control
         * over the encoding process is required.
         *
         * @param  charsetName
         *         The name of a supported {@linkplain java.nio.charset.Charset
         *         charset}
         *
         * @return  The resultant byte array
         *
         * @throws  UnsupportedEncodingException
         *          If the named charset is not supported
         *
         * @since  JDK1.1
         */
        public byte[] getBytes(String charsetName)
                throws UnsupportedEncodingException {
            if (charsetName == null) throw new NullPointerException();
            return StringCoding.encode(charsetName, value, 0, value.length);
        }
    
        /**
         * Encodes this {@code String} into a sequence of bytes using the given
         * {@linkplain java.nio.charset.Charset charset}, storing the result into a
         * new byte array.
         *
         * <p> This method always replaces malformed-input and unmappable-character
         * sequences with this charset's default replacement byte array.  The
         * {@link java.nio.charset.CharsetEncoder} class should be used when more
         * control over the encoding process is required.
         *
         * @param  charset
         *         The {@linkplain java.nio.charset.Charset} to be used to encode
         *         the {@code String}
         *
         * @return  The resultant byte array
         *
         * @since  1.6
         */
        public byte[] getBytes(Charset charset) {
            if (charset == null) throw new NullPointerException();
            return StringCoding.encode(charset, value, 0, value.length);
        }
    
        /**
         * Encodes this {@code String} into a sequence of bytes using the
         * platform's default charset, storing the result into a new byte array.
         *
         * <p> The behavior of this method when this string cannot be encoded in
         * the default charset is unspecified.  The {@link
         * java.nio.charset.CharsetEncoder} class should be used when more control
         * over the encoding process is required.
         *
         * @return  The resultant byte array
         *
         * @since      JDK1.1
         */
        public byte[] getBytes() {
            return StringCoding.encode(value, 0, value.length);
        }

    只有我一个人觉得JDK里面的代码写得特别跳吗?

    搜索 java 源码,只能找到 4 个文件中包含 file.encoding 的文件,
    也就是说,只有四个文件调用了 file.encoding 这个属性。
    在 java.nio.charset 包中的 Charset.java 中,这段话的意思说的很明确了。
    简单说就是默认字符集是在 java 虚拟机启动时决定的,
    依赖于 java 虚拟机所在的操作系统的区域以及字符集。
    代码中可以看到,默认字符集就是从 file.encoding 这个属性中获取的。

  • 相关阅读:
    shuffle
    clamp
    max
    zip
    enumerate
    isinstance
    stack
    reshape(-1)
    meshgrid
    最长回文子串
  • 原文地址:https://www.cnblogs.com/sundaymorning/p/6424108.html
Copyright © 2011-2022 走看看