Java 源代码阅读 CharSequence String Charset

开始阅读Java源代码,代码是最好的老师。

String

image.png

String是Java语言中很重要的一个类。

字符串,Java程序中类似“abc”字符串对象都是该类实例;String是常量,不可变,因此可以被多线程共享。

# 新建String对象
String str = "abc"; 
<-->
String str = new String({'a', 'b', 'c'});

String类中方法包含检查、比较、查找字符串等各种操作;类型转换通过java.lang.Character实现;Java语言给String提供了很多支持,字符串拼接使用StringBuilder和StringBuffer;String编码格式是UTF-16,更多编码集查看Charset。

Serializable

一个类如果要序列化、反序列化需要实现Serializable接口,但是奇怪的是这个接口并没有任何抽象方法。
为什么需要实现该接口呢,因为在序列化对象时ObjectOutputStream类中writeObject0方法中会对需要进行序列化对象做检测。

            // remaining cases
            if (obj instanceof String) {
                writeString((String) obj, unshared);
            } else if (cl.isArray()) {
                writeArray(obj, desc, unshared);
            } else if (obj instanceof Enum) {
                writeEnum((Enum<?>) obj, desc, unshared);
            } else if (obj instanceof Serializable) { // 所以如果对象没有实现Serializable接口那么序列化直接报错
                writeOrdinaryObject(obj, desc, unshared);
            } else {
                if (extendedDebugInfo) {
                    throw new NotSerializableException(
                        cl.getName() + "\n" + debugInfoStack.toString());
                } else {
                    throw new NotSerializableException(cl.getName());
                }
            }

Comparable

对实现它的类提供了排序方法。
由实现该接口的类的集合或列表可以使用Collections.sort()或Arrays.sort()排序,实现该接口的类可以作为SortedMap、SortedSet的key;compareTo方法和equals是不同的。

Charset

        Charset utf8 = Charset.forName("UTF-8"); // 使用该方法得到编码集

Charset提供了16位Unicode编码与其他编码的对应关系;我们都知道文件在硬盘中是以UTF-8、GBK、Big5之类的编码格式来存储的,但是Java代码在内存中是以Unicode16来存储的,所以需要建立两者之间的对应关系,这就是Charset的由来。

        ByteBuffer encode = utf8.encode("a");
        CharBuffer decode = utf8.decode(null);

Charset提供的最常用的方法,encode编码后可以存储在文件中;decode解码之后可以供Java代码直接使用。
在Charset之下,Java提供了各个编码集具体实现。


image.png

当我们需要指定编码集时只需要Charset.forName('xxx')然后转换为Unicode编码形式即可。

CharSequence

字符序列,这个接口很简单,只有几个方法;

    int length(); // 返回字符串长度(每个字符16位)
    char charAt(int index); // 返回指定位置字符(位置0 ~ length()-1)
    CharSequence subSequence(int start, int end); // end 不能大于length() 返回原字符串的子字符串(起始位置start, 结束位置end)
    public String toString(); // 返回String对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 1,365评论 0 10
  • 我要告诉你一个秘密 一个天大的秘密。 不是做事都需要有目的,很多事情做出来内心第一念头不是为了钱,不是为了名...
    长风江南阅读 185评论 0 1
  • 今天是第九天了,上午一节Gary的课,教我们如何教语法,他的方法真的很好,创建一个情景让学生根据图片说相关...
    原味石阅读 519评论 0 0