পূর্ববর্তী উত্তরগুলি সংক্ষিপ্ত করে (এবং কোনওভাবে পোলিশ এবং আপডেট করুন)। নিম্নলিখিত তিনটি পদ্ধতি ব্যবহারিকভাবে সমতুল্য। (আমি স্পষ্ট সময়সীমা যুক্ত করেছি কারণ আমি মনে করি সেগুলি অবশ্যই আবশ্যক nobody
public static void saveUrl1(final Path file, final URL url,
int secsConnectTimeout, int secsReadTimeout))
throws MalformedURLException, IOException {
// Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
try (BufferedInputStream in = new BufferedInputStream(
streamFromUrl(url, secsConnectTimeout,secsReadTimeout) );
OutputStream fout = Files.newOutputStream(file)) {
final byte data[] = new byte[8192];
int count;
while((count = in.read(data)) > 0)
fout.write(data, 0, count);
}
}
public static void saveUrl2(final Path file, final URL url,
int secsConnectTimeout, int secsReadTimeout))
throws MalformedURLException, IOException {
// Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
try (ReadableByteChannel rbc = Channels.newChannel(
streamFromUrl(url, secsConnectTimeout,secsReadTimeout)
);
FileChannel channel = FileChannel.open(file,
StandardOpenOption.CREATE,
StandardOpenOption.TRUNCATE_EXISTING,
StandardOpenOption.WRITE)
) {
channel.transferFrom(rbc, 0, Long.MAX_VALUE);
}
}
public static void saveUrl3(final Path file, final URL url,
int secsConnectTimeout, int secsReadTimeout))
throws MalformedURLException, IOException {
// Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
try (InputStream in = streamFromUrl(url, secsConnectTimeout,secsReadTimeout) ) {
Files.copy(in, file, StandardCopyOption.REPLACE_EXISTING);
}
}
public static InputStream streamFromUrl(URL url,int secsConnectTimeout,int secsReadTimeout) throws IOException {
URLConnection conn = url.openConnection();
if(secsConnectTimeout>0) conn.setConnectTimeout(secsConnectTimeout*1000);
if(secsReadTimeout>0) conn.setReadTimeout(secsReadTimeout*1000);
return conn.getInputStream();
}
আমি উল্লেখযোগ্য পার্থক্য খুঁজে পাই না, সবই আমার কাছে ঠিক বলে মনে হচ্ছে। তারা নিরাপদ এবং দক্ষ। (গতির পার্থক্য খুব কমই প্রাসঙ্গিক বলে মনে হয় - আমি স্থানীয় সার্ভার থেকে একটি এসএসডি ডিস্কে 180Mb লিখি যা প্রায় 1.2 থেকে 1.5 সেগুতে ওঠানামা করে)। তাদের বাহ্যিক গ্রন্থাগারগুলির প্রয়োজন নেই। সমস্ত নির্বিচারে আকার এবং (আমার অভিজ্ঞতার সাথে) HTTP পুনর্নির্দেশগুলি নিয়ে কাজ করে।
অতিরিক্ত হিসাবে, FileNotFoundException
সংস্থানটি পাওয়া না গেলে সমস্ত ছোঁড়া (ত্রুটি 404, সাধারণত), এবং java.net.UnknownHostException
ডিএনএস রেজোলিউশন ব্যর্থ হলে; অন্যান্য আইওএক্সেপশন ট্রান্সমিশনের সময় ত্রুটির সাথে মিলে যায়।
(সম্প্রদায় উইকি হিসাবে চিহ্নিত, তথ্য বা সংশোধন যোগ করতে নির্দ্বিধায়)