Olá pessoal!
Sou novo em java e aki!
e gostaria de saber se tem como realocar memoria.
Em C eu uso o realloc, mas em java eu nao sei como fazer.
Grato!
Olá pessoal!
Sou novo em java e aki!
e gostaria de saber se tem como realocar memoria.
Em C eu uso o realloc, mas em java eu nao sei como fazer.
Grato!
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 < 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 < buffer.length; ++i) {
buffer[i] = (byte) 0xA5;
}
buffer = Arrays.copyOf (buffer, 2000);
Ou seja, existe o "realloc" em Java.
Obrigado!! Vou usar agora msm!
Abraço
Outra pergunta.
Ele é eficiente, visto q tem q usar for?
Grato!
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.

Entendi…Obrigado!
Uma ultima pergunta…quando eu mando imprimir, ele imprime em codigo ascii. Como eu transformo pra caractere?
Muito obrigado! ajudou mto!
[]´s