Java 支持从 Url 下载数据超过 `Int.MAX_VALUE` (Url.openConnection())
Java Support Download Data from Url more then `Int.MAX_VALUE` (Url.openConnection())
当我想下载超过 Int.MAX_VALUE
内容大小时,我很困惑。
UrlConnection.contentLength
它 return Int
所以如果它更大。它可能 return -1
//i'm reading 1024 * 4 at a time
Long offset = 0 //download data
Long size = UrlConnection.contentLengthLong
如果我使用 UrlConnection.contentLengthLong
那么问题就出现了,当我阅读 UrlConnection.getInputStream.read(byte[] dest, Int offset, Int length)
并且我的 Long offset
到达 Int.MAX_VALUE
时我无法转换 Long offset
到 Int
。有可能 Int Overflow
.
那么从流中读取超过 Int.MAX_VALUE
的替代方法是什么,因为 .read(byte[] dest, Int offset, Int length)
函数不支持 Long
值。
Java中数组的最大大小不能超过整数范围。要从流中读取更多数据,您必须逐个读取。这样做时,您将永远不必使用长参数作为偏移量或长度。
当我想下载超过 Int.MAX_VALUE
内容大小时,我很困惑。
UrlConnection.contentLength
它 return Int
所以如果它更大。它可能 return -1
//i'm reading 1024 * 4 at a time
Long offset = 0 //download data
Long size = UrlConnection.contentLengthLong
如果我使用 UrlConnection.contentLengthLong
那么问题就出现了,当我阅读 UrlConnection.getInputStream.read(byte[] dest, Int offset, Int length)
并且我的 Long offset
到达 Int.MAX_VALUE
时我无法转换 Long offset
到 Int
。有可能 Int Overflow
.
那么从流中读取超过 Int.MAX_VALUE
的替代方法是什么,因为 .read(byte[] dest, Int offset, Int length)
函数不支持 Long
值。
Java中数组的最大大小不能超过整数范围。要从流中读取更多数据,您必须逐个读取。这样做时,您将永远不必使用长参数作为偏移量或长度。