日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java判断读到末尾_IO流如何判断读取到了流的结尾,程序中以-1来判断,是流中写入一个EOF表示流结束吗,底层实现呢?...

發布時間:2023/12/9 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java判断读到末尾_IO流如何判断读取到了流的结尾,程序中以-1来判断,是流中写入一个EOF表示流结束吗,底层实现呢?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

-1不是流中寫入的數據。read()方法返回的數據都是unsigned byte,即是[0,255]。底層實現有很多,比如socket IO和文件IO,甚至你自己也可以實現。

——————————————————————

給兩個類的代碼給你看看,理解一下這個東西:

/**

* 能隨時獲取讀取了多少字節數據的InputStream

*/

public class LengthAwareInputStream extends FilterInputStream {

private volatile long length;

private long maxReadSize;

public LengthAwareInputStream(InputStream in) {

this(in, Long.MAX_VALUE);

}

public LengthAwareInputStream(InputStream in, long maxReadSize) {

super(in);

this.maxReadSize = maxReadSize;

}

@Override

public int read() throws IOException {

//讀取長度超過最大值,用于檢查流量

if (length + 1 > maxReadSize) {

throw new IOException("exceeded max read size: " + maxReadSize);

}

int ret = super.read();

if (ret >= 0) {

length++;

}

return ret;

}

@Override

public int read(byte[] b, int off, int len) throws IOException {

//讀取長度超過最大值,用于檢查流量

if (length + len > maxReadSize) {

throw new IOException("exceeded max read size: " + maxReadSize);

}

int ret = super.read(b, off, len);

if (ret > 0) {

length += ret;

}

return ret;

}

public long getLength() {

return length;

}

}

/**

* 讀取數據達到特定長度之后自動終止(即返回-1)

* Created by Weijun on 2017/2/23.

*/

public class LengthLimitedInputStream extends LengthAwareInputStream {

private final long limitBytes;

/**

* @param in

* @param limitBytes

*/

public LengthLimitedInputStream(InputStream in, long limitBytes) {

super(in);

this.limitBytes = limitBytes;

}

@Override

public int read() throws IOException {

if (getLength() == limitBytes) {

return -1;

}

return super.read();

}

@Override

public int read(byte[] b, int off, int len) throws IOException {

len = (int) Math.min(len, limitBytes - getLength());

if (len == 0) {

return -1;

}

return super.read(b, off, len);

}

}

你并不需要關注底層IO流如何實現return -1。實在想看,去看JDK的實現,是c寫的。

總結

以上是生活随笔為你收集整理的java判断读到末尾_IO流如何判断读取到了流的结尾,程序中以-1来判断,是流中写入一个EOF表示流结束吗,底层实现呢?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。