As referências Java sempre apontam para um objeto. O objeto possui um cabeçalho que, entre outras coisas, identifica o tipo concreto (para que as transmissões possam falhar comClassCastException
). Para matrizes, o início do objeto também inclui o comprimento, os dados seguem imediatamente depois na memória (tecnicamente, uma implementação é livre para fazer o que bem entender, mas seria imprudente fazer qualquer outra coisa). Portanto, você não pode ter uma referência que aponte em algum lugar de uma matriz.
Em ponteiros C, aponte para qualquer lugar e para qualquer coisa, e você pode apontar para o meio de uma matriz. Mas você não pode transmitir ou descobrir com segurança quanto tempo a matriz é. Em D, o ponteiro contém um deslocamento no bloco e no comprimento da memória (ou um ponteiro equivalente ao final, não me lembro o que a implementação realmente faz). Isso permite que D divida matrizes. No C ++, você teria dois iteradores apontando para o início e o fim, mas o C ++ é um pouco estranho assim.
Então, voltando ao Java, não, você não pode. Como mencionado, o NIO ByteBuffer
permite agrupar uma matriz e, em seguida, cortá-la, mas fornece uma interface estranha. É claro que você pode copiar, o que provavelmente é muito mais rápido do que você imagina. Você pode apresentar sua própria String
abstração que permite dividir uma matriz (a implementação atual da Sun String
tem uma char[]
referência mais um deslocamento inicial e comprimento, a implementação de desempenho mais alto apenas possui a char[]
). byte[]
é de baixo nível, mas qualquer abstração baseada em classe que você colocar fará uma bagunça terrível da sintaxe, até o JDK7 (talvez).