代码之家  ›  专栏  ›  技术社区  ›  java.is.for.desktop

Java:CharBuffer“忽略”数组偏移量?

  •  1
  • java.is.for.desktop  · 技术社区  · 16 年前

    请帮助我理解以下内容:

    我创建了一个 CharBuffer 使用 CharBuffer.wrapped(new char[12], 2, 10) (数组、偏移、长度)
    因此,我希望使用偏移量 2 以及 10 . 但是 arrayOffset() 收益率 0 .

    我想了解的是(并且无法从JavaDoc中了解到):

    • 什么时候 数组() 不是

    • 有没有可能让 字符缓冲器 使用具有“实际”偏移量的数组(这样就永远不会在该偏移量之前访问该数组)?

    下面是一个小测试用例:

    import java.nio.*;
    import java.util.*;
    import org.junit.*;
    
    public class _CharBufferTests {
    
      public _CharBufferTests() {
      }
    
      private static void printBufferInfo(CharBuffer b) {
        System.out.println("- - - - - - - - - - - - - - -");
        System.out.println("capacity: " + b.capacity());
        System.out.println("length: " + b.length());
        System.out.println("arrayOffset: " + b.arrayOffset());
        System.out.println("limit: " + b.limit());
        System.out.println("position: " + b.position());
        System.out.println("remaining: " + b.remaining());
        System.out.print("content from array: ");
    
        char[] array = b.array();
        for (int i = 0; i < array.length; ++i) {
            if (array[i] == 0) {
                array[i] = '_';
            }
        }
    
        System.out.println(Arrays.toString(b.array()));
      }
    
      @Test
      public void testCharBuffer3() {
        CharBuffer b = CharBuffer.wrap(new char[12], 2, 10);
        printBufferInfo(b);
        b.put("abc");
        printBufferInfo(b);
        b.rewind();
        b.put("abcd");
        printBufferInfo(b);
      }
    
    }
    

    输出:

    - - - - - - - - - - - - - - -
    capacity: 12
    length: 10
    arrayOffset: 0
    limit: 12
    position: 2
    remaining: 10
    content from array: [_, _, _, _, _, _, _, _, _, _, _, _]
    - - - - - - - - - - - - - - -
    capacity: 12
    length: 7
    arrayOffset: 0
    limit: 12
    position: 5
    remaining: 7
    content from array: [_, _, a, b, c, _, _, _, _, _, _, _]
    - - - - - - - - - - - - - - -
    capacity: 12
    length: 8
    arrayOffset: 0
    limit: 12
    position: 4
    remaining: 8
    content from array: [a, b, c, d, c, _, _, _, _, _, _, _]
    

    谢谢您!

    2 回复  |  直到 16 年前
        1
  •  1
  •   Mark Peters    16 年前

    < http://java.Sun.com /javas/6 /DOCS/API/Java/NiO/CARBuff.html HTML包(CHAR[],%20int,%20int)“Re=“NoFoLoLoNeFror”>代码> CharBuffer(Char [],int,int)< /C> < /A>:

    < Buff行情>

    它的后置数组将是给定的数组,其数组偏移量将为零。

    < /块引用>

    正在检查对 charbuffer.offset的写入,它看起来像heapCharbuffer和stringCharbuffer都可以具有非零的arrayOffset()。

    :

    它的支持数组将是给定的数组,并且 它的数组偏移量将为零。

    正在检查写入 CharBuffer.offset 看起来HeapCharBuffer和StringCharBuffer都可以有非零的ArrayOffset()。

        2
  •  1
  •   Jonathon Faust    16 年前

    你可以使用 position 为了达到类似的效果,我想。不要使用 rewind 因为这设置了 位置 到0;使用 reset 相反。