Não consegui compreender uma parte do código abaixo, (está em uma servlet):
public void doGet(...) throws ...{
response.setContentType("application/jar");
ServletContext ctx = this.getServletContext();
InputStream is = ctx.getResourceAsStream("/bookCode.jar");
int read = 0;
byte[] bytes = new byte[1024];
OutputStream os = response.getOutputStream();
while ((read = is.read(bytes)) != -1) {
os.write(bytes, 0, read);
}
}
Eu sei que ele pega um arquivo jar, cria um outputStream e o preenche com esse arquivo jar.
O que eu não entendi é o funcionamento desse while, eu sei o que ele faz(por que estava escrito no livro), mas não entendi o diferente de -1,
nem o is.read(bytes).
O que tu não entendeu? O motivo da condição usar o “-1”?
Isso tem relação com código ASCII. O “-1” é um caracter que não existe em ASCII, portanto, enquanto o loop encontra caracteres válidos na cadeia ele entra no loop. Quando não encontrar mais nada (-1), ele sai.
[quote=pvrsouza]O que tu não entendeu? O motivo da condição usar o “-1”?
Isso tem relação com código ASCII. O “-1” é um caracter que não existe em ASCII, portanto, enquanto o loop encontra caracteres válidos na cadeia ele entra no loop. Quando não encontrar mais nada (-1), ele sai.
[/quote]
na verdade -1 não significa ‘nada’, siginifica EOF (End of File), e EOF é representado por -1
Eu dei uma lida no javadoc(http://www.docjar.com/docs/api/java/io/InputStream.html#read),
e entendi melhor, o que eu achei estranho é que esse método read (pelo que eu entendi) lê quantos
caracteres conseguir, não um por vez, nem todos de uma vez (retorna um int referente a isso).
Mas agora está claro. E eu também não tinha visto atribuição e comparação na mesma linha, falta de cultura a minha.