V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rizon
V2EX  ›  程序员

String(byte bytes[], int offset, int length)为什么字节转字符串时需要偏移量和长度?

  •  
  •   rizon ·
    othorizon · 2019-06-10 16:51:02 +08:00 · 2320 次点击
    这是一个创建于 1994 天前的主题,其中的信息可能已经有所发展或是发生改变。

    字节转字符串时,为什么会有偏移量这种东西?
    偏移之后这一组的字节剩下的东西是什么东西呢?? 哪来的呢?干什么用的呢??

    比如在读文件流时,或者读屏幕输入时,为什么会有一些不需要的信息?他们是给谁用的? 为啥不直接过滤掉?

    10 条回复    2019-06-10 23:51:41 +08:00
    feiyuanqiu
        1
    feiyuanqiu  
       2019-06-10 17:05:59 +08:00
    因为这是给需要从字节数组里取一部分出来构造字符串的场景提供的,你完全可以用另一个构造函数:

    public String(byte bytes[]) {
    this(bytes, 0, bytes.length);
    }
    akira
        2
    akira  
       2019-06-10 17:09:48 +08:00
    你需要的字符串 并不总是会从头开始的 需要根据实际情况来读取对应的结构
    rizon
        3
    rizon  
    OP
       2019-06-10 17:15:20 +08:00
    @feiyuanqiu #1
    @akira #2
    我想问的就是那些不需要的部分是怎么来的?
    rizon
        4
    rizon  
    OP
       2019-06-10 17:15:46 +08:00
    专门为这个提供一个 offset 的概念,而不是让用户自己分割好之后在传进来,而且在流读取的时候也需要用这个。
    说明偏移量是一个较底层的原因产生的东西,我想知道的就是他是怎么产生的,是由于计算机的什么导致的?比如是因为 CPU ?
    lff0305
        5
    lff0305  
       2019-06-10 17:46:58 +08:00
    比如你读文件要略过若干个字节的头部(比如 BOM )
    更多的情况是你从网络读了一些 byte 过来,要略过头尾
    littleylv
        6
    littleylv  
       2019-06-10 17:58:34 +08:00
    这种情况非常正常好不好,很多交互信息带了头(例如标志这条信息是什么东西)尾(例如校验位)
    pmispig
        7
    pmispig  
       2019-06-10 18:07:00 +08:00
    我感觉这个方法多此一举,我自己会切割好再转。
    ArthurRen
        8
    ArthurRen  
       2019-06-10 18:09:54 +08:00 via Android
    楼上这么做会增加内存开销啊
    pursuer
        9
    pursuer  
       2019-06-10 18:16:58 +08:00
    @rizon 如果你说的是 Java,用户分割的时候会需要一次内存拷贝,生成 String 的时候需要拷贝一次,加上 offset 就可以只拷贝一次了
    C++的 string 就直接传入的 char*,因为用户可以移动 char*指针不需要复制子串
    rizon
        10
    rizon  
    OP
       2019-06-10 23:51:41 +08:00
    @littleylv #6
    @pursuer #9
    ok 明白了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:00 · PVG 17:00 · LAX 01:00 · JFK 04:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.