Como evitar fazer cópias defensivas do ByteBuffer?

Eu tenho uma classe que aceita um ByteBuffer como argumento de construtor. Existe uma maneira de evitar fazer cópias defensivas para garantir que o buffer não seja modificado além desse ponto?

ByteBuffer.isReadOnly () não garante que o proprietário original não modifique o buffer. Para piorar a situação, não parece haver uma maneira de subclassificar o ByteBuffer. Alguma ideia?

Resposta 1

A única maneira real é, como você diz buf.asReadOnlyBuffer(), depois passar isso para o construtor. Não há outra opção além disso, embora você possa fazer uma cópia do conteúdo em um novo ByteBuffere depois passá-lo.

Resposta: 2

Não evita uma cópia, mas talvez:

  1. Use um pool pré-preenchido de ByteBuffers pré-alocados
  2. Permita que o construtor da classe Author permita uma 'cópia' do ByteBuffer recebido, mas faça com que a classe use um ByteBuffer do pool para mover os custos de Alloc / Dealloc para a inicialização / desligamento do aplicativo. Pague apenas um custo de memcopy dessa maneira.
Resposta: 3

Eu tenho um campo em um formulário para indicar a duração do tempo de um evento. Digamos, o evento dura 15 minutos. Portanto, o campo terá o seguinte valor: 00:15 Se durar 1 hora: 01:00, etc. Como posso ...

classe pública MySerializable implementa Serializable {private int x = 10; estático privado int y = 15; public static void main (String ... args) {AnotherClass a = new AnotherClass (); ...

Eu poderia jurar que, há alguns meses, baixei uma cópia do Java 1.5 SE JDK e não precisei fornecer informações sobre meu primeiro filho. Hoje, eu tive que passar pelo registro e nós ...

Obtendo esse erro ao executar um teste simples. > versão do java -version java "1.8.0_102"> versão do compilador javac -version javac 1.8.0_102 Exceção no encadeamento "main" java.lang ....