Eh o seguinte meu caro:
1-) O metodo InputStream.available() costuma ser meio lento e retorna o
valor atual de bytes no BUFFER e NAUM O VALOR TOTAL de bytes no Stream;
Dica - use um valor static, como 2048
2-) O metodo InputStream.read(bytes[]) tem um valor de retorno que indica
quantos bytes foram realmente lidos. Desta forma, eu reescreveria o codigo +
ou - assim: (supondo JDK = 1.1, jah que hah colocoes + eficientes no 1.2)
java.util.Vector v = new Vector(2,2);
int total = 0;
int i = 0;
while (i ! = -1) {
bytes = new byte[2048];
i = inp.read(bytes);
if (i > 0) {
total +=i;
v.addElement(new Object[] {bytes,new Integer(i)});
}
}
final byte[] imagem = new byte[total];
int pos = 0;
Object[] o;
int tam = 0;
for (final java.util.Enumeration e = v.elements();
e.hasMoreElements(); ) {
o = (Object[]) e.nextElement();
tam = ((Integer)o[1]).intValue();
System.arraycopy((byte[])o[0],0,imagem,pos,tam);
pos += tam;
}
label.setText("Tamanho stream: " + total);
Img = Toolkit.getDefaultToolkit().createImage(imagem);
T +!!
Michael Nascimento Santos
Analista/Consultor
CPM Sistemas - www.cpm.com.br
----Original Message Follows----
From: "Cleto Henrique Andrade Silva" <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
Subject: [java-list] Acessando Servlet
Date: Mon, 8 Jan 2001 09:22:15 -0200
Pessoal,
fiz um servlet que retorna uma imagem. Quando chamo este servlet de uma
página HTML a imagem é sempre exibida corretamente. Quando o chamo de uma
APPLET a imagem só é exibida corretamente a primeira vez. Da primeira vez o
tamanho do InputStream é de 4768 bytes e das próximas vezes é de 2048 bytes.
Vejam o código de minha Applet abaixo. Alguém saberia me dizer o que tenho
que fazer para que sejam lidos todos os bytes sempre?
Obs: estou usando jswdk-1.0.1
public void start()
{
URL url;
InputStream inp;
byte[] bytes;
try
{
url = new URL("http://localhost:8080/examples/servlet/Teste");
URLConnection uc = url.openConnection();
uc.setDoInput(true);
uc.setUseCaches(false);
inp = uc.getInputStream();
bytes = new byte[inp.available()];
label.setText("Tamanho stream: " + inp.available());
inp.read(bytes);
Img = Toolkit.getDefaultToolkit().createImage(bytes);
}
catch (Exception e)
{}
}
public void paint(Graphics g)
{
if (Img != null)
{
g.drawImage(Img, 10, 10, this);
}
}
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------