Membaca daripada InputStream dengan Tamat Masa
Adakah mungkin untuk membaca daripada InputStream dan menentukan tamat masa? Ya, tetapi ia tidak semudah yang disangka. Kaedah InputStream.read() mungkin tidak boleh diganggu dan kaedah InputStream.available() mungkin mengembalikan 0 walaupun data tersedia.
Fakta yang Disokong oleh Dokumentasi Sun
Menggunakan InputStream.available()
InputStream.available() harus mengembalikan anggaran bilangan bait yang tersedia untuk dibaca tanpa menyekat, tetapi adalah penting untuk ambil perhatian bahawa subkelas bertanggungjawab untuk mengatasi kaedah ini. Dalam praktiknya, kelas aliran input konkrit menyediakan nilai yang bermakna untuk available().
Kaveat
Penyelesaian Paling Mudah (Tiada Penyekatan)
byte[] inputData = new byte[1024]; int result = is.read(inputData, 0, is.available());
Penyelesaian Lebih Kaya (Memaksimumkan Isian Penampan Dalam Masa Tamat)
public static int readInputStreamWithTimeout(InputStream is, byte[] b, int timeoutMillis) throws IOException { int bufferOffset = 0; long maxTimeMillis = System.currentTimeMillis() + timeoutMillis; while (System.currentTimeMillis() < maxTimeMillis & bufferOffset < b.length) { int readLength = java.lang.Math.min(is.available(), b.length - bufferOffset); int readResult = is.read(b, bufferOffset, readLength); if (readResult == -1) break; bufferOffset += readResult; } return bufferOffset; }
Atas ialah kandungan terperinci Bagaimanakah saya Boleh Membaca daripada Java InputStream dengan Tamat Masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!