gpt4 book ai didi

java - 在 HttpURLConnection.setFixedLengthSTreamingMode() 中获取异常

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:33 26 4
gpt4 key购买 nike

我试图在 HttpURLConnection 对象中设置 fixedLengthStreamingMode() 属性,但出现异常 java.lang.NoSuchMethodError.

代码:

FileInputStream fileInputStream = new FileInputStream(
sourceFile);
String url = this.fileParameter.getServerUrl();
conn = getMultipartHttpURLConnection(url, boundary);
String header=setRequestHeaders(conn);
conn.setRequestProperty(this.fileParameter.getFileKey(),
this.fileParameter.getFileName());
requestSize= (header.length()+new File(fileParameter.getFilePath()).length());
conn.setFixedLengthStreamingMode(requestSize);

错误

E/AndroidRuntime(17418): java.lang.RuntimeException: An error occured while executing doInBackground()   

E/AndroidRuntime(17418): Caused by: java.lang.NoSuchMethodError: java.net.HttpURLConnection.setFixedLengthStreamingMode

注意:我使用的是java 7平台。

最佳答案

查看此处的文档 https://developer.android.com/reference/java/net/HttpURLConnection.html#setFixedLengthStreamingMode(int)

有两种方法:

  • setFixedLengthStreamingMode(int) 在 API 级别 1 中添加
  • setFixedLengthStreamingMode(long) 在 API 级别 19 中添加

int 最大值为 2,147,483,647

long 最大值为 9,223,372,036,854,775,807

流媒体术语,这意味着 setFixedLengthStreamingMode(int) 的最大大小长度为(为了安全起见,删除了小数):

int sizeInBytes = Integer.MAX_VALUE; // 2,147,483,647 bytes
int sizeInKB = sizeInBytes / 1024; // 2,097,151 kilobytes
int sizeInMB = sizeInKB / 1024; // 2,047 megabytes
int sizeInGB = sizeInMB / 1024; // 1.99 gigabytes
API 19 中添加的

setFixedLengthStreamingMode(long) 是为了支持比 Integer.Max 能够支持的更大的大小(即大文件):

long sizeInBytes = Long.MAX_VALUE;  // 9,223,372,036,854,775,807 bytes
long sizeInKB = sizeInBytes / 1024; // 9,007,119,254,740,991 kilobytes
long sizeInMB = sizeInKB / 1024; // 8,796,014,897,207 megabytes
long sizeInGB = sizeInMB / 1024; // 8,589,858,298 gigabytes
long sizeInTB = sizeInGB / 1024; // 8,388,533 terabytes
long sizeInPB = sizeInTB / 1024; // 8,191 petabytes

如果您永远不会超过 Integer.MAX_VALUE,则将 long contentLength 转换为 int 并且不会收到 API 错误,但当 requestSize > Integer.MAX_VALUE 时可能会收到错误:

conn.setFixedLengthStreamingMode((int) requestSize);

您可以简单地执行以下操作:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
conn.setFixedLengthStreamingMode(requestSize);
} else if (requestSize <= Integer.MAX_VALUE) {
conn.setFixedLengthStreamingMode((int) requestSize);
} else {
//Don't set fixed length...
}

关于java - 在 HttpURLConnection.setFixedLengthSTreamingMode() 中获取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27793247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com