Realocar memoria

6 respostas
G

Olá pessoal!
Sou novo em java e aki! :smiley: e gostaria de saber se tem como realocar memoria.
Em C eu uso o realloc, mas em java eu nao sei como fazer.

Grato!

6 Respostas

T

O que é esquisito no Java é que você tem de reaprender a trabalhar com memória, se está acostumado com o C++.

Acho que o uso normal de "realloc" é quando você quer alterar o tamanho de um array em memória (pelo menos só uso para isso, também programo em C++ há muitos anos):

char *buffer = malloc (1000);
memset (buffer, 0xA5, 1000); // preenchi as 1000 posições de buffer com 
// o valor 0xA5
buffer = realloc (buffer, 2000); // criamos um buffer de 2000 posições, 
//copiamos o valor anterior para esse novo buffer, e retornamos o endereço 
// do novo buffer

Em Java você tem de fazer isto:

byte[] buffer = new byte[1000];
for (int i = 0; i &lt buffer.length; ++i) {
    buffer[i] = (byte) 0xA5;
}
byte[] tmp = new byte[2000];
System.arraycopy (buffer, 0, tmp, 0, buffer.length);
buffer = tmp;
tmp = null;

No Java 6.0 já existe isto:

import java.util.Arrays;
...
byte[] buffer = new byte[1000];
for (int i = 0; i &lt buffer.length; ++i) {
    buffer[i] = (byte) 0xA5;
}
buffer = Arrays.copyOf (buffer, 2000);

Ou seja, existe o "realloc" em Java.

G

Obrigado!! Vou usar agora msm!

Abraço

G

Outra pergunta.
Ele é eficiente, visto q tem q usar for?

Grato!

T

O “for” que está nesse exemplo é só para pôr um valor conhecido no array. É só um exemplo; ele não é necessário para fazer a cópia.

Ele seria equivalente ao “memset” do C++; o equivalente perfeito do memset em C++ é:

Arrays.fill (buffer, (byte) 0xA5);

Veja a documentação da classe java.util.Arrays.

G

:smiley:
Entendi…Obrigado!

G

Uma ultima pergunta…quando eu mando imprimir, ele imprime em codigo ascii. Como eu transformo pra caractere?

Muito obrigado! ajudou mto!

[]´s

Criado 13 de abril de 2007
Ultima resposta 13 de abr. de 2007
Respostas 6
Participantes 2