Как работает InputStream.read(byte[])?
Я пытаюсь разархивировать папку zip, у меня есть проблема, понять, как ZipInputStream.read(byte[])
Работа. Этот код работает просто отлично, но я не знаю, больше ли мой файл, чем буфер, который я установил, как я буду работать.
byte[] buffer = new byte[1024];
zipIs = new ZipInputStream(new FileInputStream(FILE_PATH));
while ((entry = zipIs.getNextEntry()) != null) {
String entryName = File.separator + entry.getName();
// Call file input stream
FileOutputStream fos = new FileOutputStream(entryName);
int len;
// Write current entry
while ((len = zipIs.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
}
Я прочитал документ, но я нахожу это запутанным, пожалуйста, помогите.
1 ответ
У меня проблема понять как
ZipInputStream.read(byte[])
Работа.
Это описано в Javadocs для InputStream.read(bytes[])
:
Этот код работает просто отлично, но я не знаю, больше ли мой файл, чем буфер, который я установил, как я буду работать.
Это то, что цикл.
while ((len = zipIs.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
Он читает один буфер за раз, устанавливая len
на количество прочитанных байтов, пока read
вызов возвращает ноль (или меньше). Каждый заполненный буфер записывается с использованием len
сказать сколько байтов записать, а потом повторяется...
while ((a = call()) > 0) {
синтаксис просто эксплуатирует тот факт, что присвоение (например, (a = call())
) - это выражение, значением которого является значение, присвоенное переменной.
Чтение потоков - это одна из ситуаций, когда эта идиома обычно используется. Это стоит запомнить.