{"id":936,"date":"2018-09-17T18:37:49","date_gmt":"2018-09-17T09:37:49","guid":{"rendered":"https:\/\/chat-messenger.com\/?p=936"},"modified":"2019-10-04T02:02:07","modified_gmt":"2019-10-03T17:02:07","slug":"file-copy","status":"publish","type":"post","link":"https:\/\/chat-messenger.com\/de\/blog\/java\/dateikopie","title":{"rendered":"Java-Datei kopieren (Puffergr\u00f6\u00dfe \u00e4ndern)"},"content":{"rendered":"<h2 class=\"common_title\"><a name=\"0\">Java-Datei kopieren (Puffergr\u00f6\u00dfe \u00e4ndern)<\/a><\/h2>\n<p>\nAuf Java <strong>java.io.InputStream<\/strong>,,<strong>java.io.OutputStream<\/strong> bei<br \/>\nVorstellung eines Beispielprogramms, das die Kopierverarbeitung mithilfe von Eingabe-\/Ausgabestr\u00f6men durchf\u00fchrt.<br \/>\nBei der Kopierverarbeitung mittels Streams k\u00f6nnen auch gro\u00dfe Dateien relativ schnell kopiert werden, indem die Lesepuffergr\u00f6\u00dfe erh\u00f6ht wird.<br \/>Im Beispielprogramm kann die Gr\u00f6\u00dfe des Datenlesepuffers mit einem Argument angegeben werden.\n<\/p>\n<p>\nDer angegebene Lesepufferbereich ist innerhalb des JavaVM-Heaps gesichert, sodass eine zu gro\u00dfe Gr\u00f6\u00dfe zu einer schlechten Effizienz f\u00fchrt. Daher pr\u00fcfen wir beim Kopieren von Dateien auch die effiziente Gr\u00f6\u00dfe des Datenlesepuffers.\n<\/p>\n<h2 class=\"common_title\"><a name=\"1\">Beispielprogramm<\/a><\/h2>\n<p><textarea readonly=\"readonly\" style=\"font-size: 13px;height: 400px;\" class=\"src\" onclick=\"this.focus();this.select()\">\/**<br \/>\n * \u30b3\u30d4\u30fc\u5143\u306e\u30d1\u30b9[srcPath]\u304b\u3089\u30b3\u30d4\u30fc\u5148\u306e\u30d1\u30b9[destPath]\u3078\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30d4\u30fc<br \/>\n * \u3092\u884c\u3044\u307e\u3059\u3002<br \/>\n * @param srcPath    \u30b3\u30d4\u30fc\u5143\u306e\u30d1\u30b9<br \/>\n * @param destPath    \u30b3\u30d4\u30fc\u5148\u306e\u30d1\u30b9<br \/>\n * @param bufferSize    \u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba(KB)\u3067\u3059\u3002<br \/>\n * @throws IOException    \u4f55\u3089\u304b\u306e\u5165\u51fa\u529b\u51e6\u7406\u4f8b\u5916\u304c\u767a\u751f\u3057\u305f\u5834\u5408<br \/>\n *\/<br \/>\npublic static void copyStream(String srcPath, String destPath,<br \/>\n    int bufferSize) throws IOException {<br \/>\n    InputStream in = new FileInputStream(srcPath);<br \/>\n    OutputStream os = new FileOutputStream(destPath);<br \/>\n    copyStream(in, os, bufferSize);<br \/>\n}<\/p>\n<p>\/**<br \/>\n * Schreibt Daten vom Eingabestream in den Ausgabestream.<br \/>\n *Der Eingabe-\/Ausgabestream wird geschlossen, nachdem der Kopiervorgang abgeschlossen ist.<br \/>\n * @param im Eingabestream<br \/>\n * @param OS-Ausgabestream<br \/>\n * @param bufferSize Datenlesepuffergr\u00f6\u00dfe (KB).<br \/>\n * @throws IOException Wenn eine Ausnahme bei der Ein-\/Ausgabeverarbeitung auftritt<br \/>\n *\/<br \/>\npublic static void copyStream(InputStream in, OutputStream os,<br \/>\n    int bufferSize) l\u00f6st eine IOException {<br \/>\n    int len = -1;<br \/>\n    byte[] b = neues byte[bufferSize * 1024];<br \/>\n    versuchen {<br \/>\n        while ((len = in.read(b, 0, b.length)) != -1) {<br \/>\n            os.write(b, 0, len);<br \/>\n        }<br \/>\n        os.flush();<br \/>\n    } Endlich {<br \/>\n        if (in != null) {<br \/>\n            versuchen {<br \/>\n                in.close();<br \/>\n            } Catch (IOException e) {<br \/>\n                e.printStackTrace();<br \/>\n            }<br \/>\n        }<br \/>\n        if (os != null) {<br \/>\n            versuchen {<br \/>\n                os.close();<br \/>\n            } Catch (IOException e) {<br \/>\n                e.printStackTrace();<br \/>\n            }<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n<\/textarea><\/p>\n<p><script type=\"text\/javascript\" src=\"https:\/\/chat-messenger.com\/js\/common.js?dd12sssas2223\" charset=\"UTF-8\"><\/script><br \/>\n<script type=\"text\/javascript\"> writePR(); <\/script><\/p>\n<h2 class=\"common_title\"><a name=\"3\">Ausf\u00fchrung<\/a><\/h2>\n<p>\nUm die Beispielprogrammdatei zu kopieren, haben wir eine 100 MB gro\u00dfe Datei \u201e100M.txt\u201c direkt unter dem Laufwerk C vorbereitet. Im Beispielprogramm <i>C:\\100M.txt<\/i> , liest Daten in Einheiten mit einer Puffergr\u00f6\u00dfe von 1000 KB. <i>C:\\a.txt<\/i>  Kopieren nach.<\/p>\n<p>Das Beispiel wurde in der folgenden Umgebung ausgef\u00fchrt.<br \/>\nBetriebssystem: WindowsXP<br \/>\nCPU: Athlon 1,46 GHz<br \/>\nSpeicher: 1 GB<br \/>\nJRE: 1.6.4\n<\/p>\n<p>\u25c6Ausf\u00fchrungsbeispiel<\/p>\n<pre class=\"sample_src\">\/** * Ausf\u00fchrungsbeispiel * @param args *\/ public static void main(String[] args) { try { copyStream(&quot;C:\\\\100M.txt&quot;, &quot;C:\\\\a.txt&quot;,1000); } Catch (IOException e) { e.printStackTrace(); } }\r\n<\/pre>\n<p>\u25c6Ausf\u00fchrungsergebnisse<br \/>\n<a href=\"https:\/\/chat-messenger.com\/images\/file_copy.jpg\" target=\"_blank\"><br \/>\n<img src=\"https:\/\/chat-messenger.com\/images\/file_copy.jpg\" alt=\"\" border=\"0\"><\/a><br clear=\"all\"><\/p>\n<h2 class=\"common_title\"><a name=\"4\">Puffergr\u00f6\u00dfe \u00e4ndern<\/a><\/h2>\n<p>\nUm die effiziente Gr\u00f6\u00dfe des Datenlesepuffers beim Kopieren von Dateien zu \u00fcberpr\u00fcfen, verwenden Sie das dritte Argument von copyStream as<br \/>\nDie Ergebnisse einer \u00e4hnlichen Kopierverarbeitung in 1-KB-, 100-KB-, 1000-KB- und 10000-KB-Einheiten sind unten zusammengefasst.<br \/>\n<img src=\"https:\/\/chat-messenger.com\/images\/file_copy_stream_reslt.jpg\" alt=\"\" border=\"0\"><br clear=\"all\"><br \/>\n<br \/>\nObwohl aus den obigen Ergebnissen allein keine Schlussfolgerung gezogen werden kann, wenn Sie die Gr\u00f6\u00dfe des Datenlesepuffers in Einheiten von 1000 KB angeben,<br \/>\nDie Ergebnisse zeigten, dass es hinsichtlich der Heap-Nutzung und der Verarbeitungszeit w\u00e4hrend der Kopierverarbeitung effizient war.<br \/>\n\u00c4hnliche Ergebnisse wurden auch dann erzielt, wenn die Dateigr\u00f6\u00dfe erh\u00f6ht wurde (ca. 1 GB).<\/p>\n<p>Wenn Sie hingegen eine kleine Datei kopieren (ungef\u00e4hr 1 MB oder weniger), ist eine Erh\u00f6hung der Puffergr\u00f6\u00dfe verschwenderisch, daher ist es meiner Meinung nach besser, etwa 100 KB anzugeben.\n<\/p>\n\n<h2 class=\"common_title\"><a name=\"5\">Verwenden Sie FileChannel f\u00fcr h\u00f6here Geschwindigkeiten<\/a><\/h2>\n<p><a name=\"5\"><\/a><\/p>\n<p><a name=\"5\"><br \/>\n\u3000<strong>java.io.InputStream<\/strong>,,<strong>java.io.OutputStream<\/strong><br \/>\nDie Kopierverarbeitung ist wichtig f\u00fcr das Verst\u00e4ndnis von Eingabe-\/Ausgabestr\u00f6men, aber<br \/>\nNeue I\/O eingef\u00fchrt in J2SE1.4 <strong>java.nio.channels.FileChannel#transferTo<\/strong><br \/>\nMit dieser Methode k\u00f6nnen Sie Dateien noch effizienter kopieren.<br \/>\nAls N\u00e4chstes zeige ich Ihnen, wie Sie mit FileChannel einfach und schnell Dateien kopieren.<br \/>\n\u21d2 <\/a><a href=\"https:\/\/chat-messenger.com\/de\/blog\/java\/dateikanalubertragung-an\/\"><strong>Java-Dateikopie (einfach und schnell)<\/strong><\/a><br \/>\n<\/p>","protected":false},"excerpt":{"rendered":"<p>Java-Dateikopie (Puffergr\u00f6\u00dfe \u00e4ndern) java.io.InputStream in Java, ja [\u2026]<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":""},"categories":[19],"tags":[],"_links":{"self":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/936"}],"collection":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/comments?post=936"}],"version-history":[{"count":6,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/936\/revisions"}],"predecessor-version":[{"id":4541,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/936\/revisions\/4541"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/media?parent=936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/categories?post=936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/tags?post=936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}