URL (http://.../File.mp4)을 사용하여 인터넷에서 파일을 다운로드하는 방법을 아는 사람이 있습니까? NIO를 사용하려고 시도하지만 항상 Integer.MAX_VALUE에서 스트림 끝. 내 파일은 2.5GB입니다.자바 - URL에서 파일을 다운로드하는 방법 Integer.MAX_VALUE보다 큰
내 코드 :
String url = "http://.../Somefile.mp4";
String filename = "Path/to/file/Something.mp4";
boolean koncano = false;
URLConnection conn = new URL(url).openConnection();
conn.setRequestProperty("Range", "bytes=" + new File(filename).length() + "-");
ReadableByteChannel rbc = Channels.newChannel(conn.getInputStream());
long remain = conn.getContentLength();
FileOutputStream fos = new FileOutputStream(filename, true);
while (!koncano) {
long downloaded = new File(filename).length();
long buffer = (remain > 65536) ? 1 << 16 : remain;
while (remain > 0) {
long write = fos.getChannel().transferFrom(rbc, downloaded, buffer);
downloaded += write;
remain -= write;
if (write == 0) {
break;
}
}
if (remain <= 0) {
System.out.println("File is complete");
rbc.close();
fos.close();
koncano = true;
}
}
스택 오버플로에 오신 것을 환영합니다! 디버깅 도움을 요청하는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, 특정 문제 또는 오류 및 질문 자체에서이를 재현하는 데 필요한 가장 짧은 코드가 포함되어야합니다. 분명한 문제 설명이없는 질문은 다른 독자에게 유용하지 않습니다. 참조 : [mcve]를 만드는 방법. '편집'링크를 사용하여 * 질문 *을 개선하십시오 - 의견을 통해 더 많은 정보를 추가하지 마십시오. 감사! – GhostCat
외부 사이트 링크 사용 안함 - 여기에 예제 코드를 입력하십시오! – GhostCat
나는 당신이'HttpURLConnection' 또는 sth를 사용하고 있다고 의심합니다. 비슷한 'ByteArrayInputStream'을 사용합니다. 즉, byte []와 Java 배열의 최대 길이는 Integer.MAX_VALUE입니다. – Thomas