Problemas de referência com vetor

4 respostas
fNobre

Boa tarde,

Gostaria de dizer que não sei qual é o assunto específico dessa minha dúvida, por isso não soube como deixar um título mais claro.

Fiz uma aplicação utilizando JMF e rodou beleza. Mas eu fiz meio que uma gambiarra em certa parte do código. Eu tenho dois vetores byte[], que contém os pixels do frame, chamado inData(entrada) e outData(saída). Segue a declaração deles:
byte[] inData = (byte[]) inBuffer.getData();
byte[] outData = (byte[]) outBuffer.getData();
Agora a minha dúvida. Eu criei um método só pra receber o inData e jogar no outData. Porém quando eu não passo o outData como parâmetro o código não funciona. Para ilustrar segue abaixo os códigos dos dois métodos:
private byte[] imagemNormal(byte[] outData, byte[] inData) {
        for(int i=0;i<inData.length;i++)
            outData[i] = inData[i];

        return outData;
    }
private byte[] imagemNormal(byte[] inData) {
        byte[] outData = new byte[inData.length];
        
        for(int i=0;i<inData.length;i++)
            outData[i] = inData[i];

        return outData;
    }
No método inicial(onde estão declarados o outData e o inData:
outData = imagemNormal(outData, inData);
Este funciona.
outData = imagemNormal(inData);
Este não.

Como eu precisava que a aplicação rodasse(estava meio sem tempo de pensar nos detalhes teóricos), usei o primeiro caso e pronto. Agora que posso pensar a respeito, por quê isso acontece?

4 Respostas

O
public class Main {

	public static void main(String[] args) {		
		byte[] a1 = new byte[] { '0', '1', '2', '3' };
		byte[] a3 = new byte[] { '8', '9', 'a', 'b' };

		byte[] a2 = new byte[] { '4', '5', '6', '7' };
		a2 = Main.copia(a2, a1);

		for (byte b : a2) {
			System.out.println("1. b: " + b);
		}
		
		a2 = a3.clone();
		
		for (byte b : a2) {
			System.out.println("2. b: " + b);
		}
		
	}

	private static byte[] copia(byte[] outData, byte[] inData) {

		// outData = new byte[inData.length];

		for (int i = 0; i < inData.length; i++)
			outData[i] = inData[i];

		return outData;
	}
}
Não consegui recriar a mesma situação, no meu caso a primeira opção funcionou, inicializei o vetor com outros valores e substitui pelos valores de a1.. pra facilitar ainda mais nem é preciso um método de cópia.. basta usar as própriedades do objeto java, esta mostrando uma forma mais natural de copiar os valores na linha
a2 = a3.clone();
fNobre

Na verdade, esse método de copiar vetor foi só demonstrativo mas ele dá o mesmo erro que os outros que eu fiz.

O estranho é que eu peguei essa sua classe e fiz o segundo método que havia citado(sem passar o outData como parâmetro) e funcionou normal. Porém quando voltei pro JMF, não funciona dessa forma. Eu preciso passá-lo como parâmetro.

Z

Cara não sei se seria isso, mas a diferença que vi de seu código para o do amigo ai acima foi o NEW no vertor de byte.

tenta so isso pra ver, pode ser q seja isso…

flw

fNobre

ziltonjunior:
Cara não sei se seria isso, mas a diferença que vi de seu código para o do amigo ai acima foi o NEW no vertor de byte.

tenta so isso pra ver, pode ser q seja isso…

flw

O new no código dele é porque ele está criando uma nova instância byte[].

Mas isso me fez pensar. Quando eu faço isto:

byte[] outData = (byte[]) outBuffer.getData();

Eu estou criando um objeto que faz referência a um atributo do objeto inBuffer. E ao fazer: outData = imagemNormal(inData); eu perco a referência anterior e associo o objeto outData a outro objeto. É isso? Aí quando eu passo o objeto outData como parâmetro pro método imagemNormal() eu não perco a referência anterior.

Criado 21 de maio de 2009
Ultima resposta 23 de mai. de 2009
Respostas 4
Participantes 3