{"id":939,"date":"2018-09-17T18:39:34","date_gmt":"2018-09-17T09:39:34","guid":{"rendered":"https:\/\/chat-messenger.com\/?p=939"},"modified":"2018-12-23T01:53:23","modified_gmt":"2018-12-22T16:53:23","slug":"filechannel-transferto","status":"publish","type":"post","link":"https:\/\/chat-messenger.com\/vi\/blog\/java\/chuyen-kenh-tap-tin-sang","title":{"rendered":"Sao ch\u00e9p t\u1ec7p Java (d\u1ec5 d\u00e0ng v\u00e0 nhanh ch\u00f3ng)"},"content":{"rendered":"<h2 class=\"common_title\"><a name=\"0\">Sao ch\u00e9p t\u1ec7p Java (d\u1ec5 d\u00e0ng v\u00e0 nhanh ch\u00f3ng)<\/a>FileChannel#transferTo<\/h2>\n<p>\nTrong Java<strong>sao ch\u00e9p t\u1eadp tin<\/strong>Gi\u1edbi thi\u1ec7u m\u1ed9t ch\u01b0\u01a1ng tr\u00ecnh m\u1eabu \u0111\u1ec3 th\u1ef1c hi\u1ec7n vi\u1ec7c n\u00e0y.<br \/>\nCh\u01b0\u01a1ng tr\u00ecnh m\u1eabu d\u1ef1a tr\u00ean I\/O m\u1edbi \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u trong J2SE1.4. <strong>java.nio.channels.FileChannel#transferTo<\/strong> ph\u01b0\u01a1ng ph\u00e1p.<br \/>\nB\u1ea1n c\u00f3 th\u1ec3 vi\u1ebft ch\u01b0\u01a1ng tr\u00ecnh x\u1eed l\u00fd sao ch\u00e9p m\u00e0 kh\u00f4ng c\u1ea7n lo l\u1eafng v\u1ec1 b\u1ed9 \u0111\u1ec7m c\u1ea7n thi\u1ebft \u0111\u1ec3 \u0111\u1ecdc d\u1eef li\u1ec7u, \u0111\u00e2y l\u00e0 ph\u01b0\u01a1ng ph\u00e1p m\u00e3 h\u00f3a \u0111\u01a1n gi\u1ea3n nh\u1ea5t.\n<\/p>\n<h2 class=\"common_title\"><a name=\"1\">K\u00eanh l\u00e0 g\u00ec?<\/a><\/h2>\n<p>\nK\u00eanh t\u1eeb \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng theo nhi\u1ec1u c\u00e1ch kh\u00e1c nhau.<br \/>\nV\u1ec1 c\u01a1 b\u1ea3n, n\u00f3 d\u01b0\u1eddng nh\u01b0 ch\u1ec9 ra \u0111\u01b0\u1eddng truy\u1ec1n \u0111\u1ec3 nh\u1eadp v\u00e0 xu\u1ea5t d\u1eef li\u1ec7u gi\u1eefa c\u00e1c thi\u1ebft b\u1ecb kh\u00e1c.<strong>java.nio.channels.FileChannel<\/strong> l\u00e0 m\u1ed9t l\u1edbp \u0111\u1ea1i di\u1ec7n cho m\u1ed9t k\u1ebft n\u1ed1i \u0111\u1ec3 \u0111\u1ecdc v\u00e0 ghi v\u00e0o t\u1eadp tin.<br \/>\n<br \/><strong>chuy\u1ec3n t\u1edbi<\/strong> M\u1ed9t ph\u01b0\u01a1ng th\u1ee9c c\u00f3 th\u1ec3 chuy\u1ec3n byte t\u1eeb t\u1ec7p ngu\u1ed3n sang k\u00eanh \u0111\u00edch.<\/p>\n<p>Sau \u0111\u00e2y \u0111\u01b0\u1ee3c tr\u00edch d\u1eabn t\u1eeb t\u00e0i li\u1ec7u JavaAPI.\n<\/p>\n<blockquote><p>\n<strong>transferTo(v\u1ecb tr\u00ed d\u00e0i, s\u1ed1 l\u01b0\u1ee3ng d\u00e0i, m\u1ee5c ti\u00eau WritableByteChannel)<\/strong><br \/>\nChuy\u1ec3n byte t\u1eeb t\u1ec7p c\u1ee7a k\u00eanh n\u00e0y sang k\u00eanh byte c\u00f3 th\u1ec3 ghi \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh.<br \/>\nPh\u01b0\u01a1ng ph\u00e1p n\u00e0y c\u00f3 th\u1ec3 hi\u1ec7u qu\u1ea3 h\u01a1n nhi\u1ec1u so v\u1edbi m\u1ed9t v\u00f2ng l\u1eb7p \u0111\u01a1n gi\u1ea3n \u0111\u1ecdc d\u1eef li\u1ec7u t\u1eeb k\u00eanh n\u00e0y v\u00e0 ghi n\u00f3 v\u00e0o k\u00eanh \u0111\u00edch. Nhi\u1ec1u h\u1ec7 \u0111i\u1ec1u h\u00e0nh c\u00f3 th\u1ec3 chuy\u1ec3n byte tr\u1ef1c ti\u1ebfp t\u1eeb b\u1ed9 \u0111\u1ec7m c\u1ee7a h\u1ec7 th\u1ed1ng t\u1ec7p sang k\u00eanh \u0111\u00edch. T\u1ea1i th\u1eddi \u0111i\u1ec3m n\u00e0y, kh\u00f4ng c\u00f3 byte n\u00e0o \u0111\u01b0\u1ee3c sao ch\u00e9p.\n<\/p><\/blockquote>\n<p>\nK\u1ebft qu\u1ea3 x\u00e1c minh n\u00e0y cho th\u1ea5y c\u00e1ch s\u1eed d\u1ee5ng lu\u1ed3ng th\u00f4ng th\u01b0\u1eddng,<br \/>\nQu\u00e1 tr\u00ecnh sao ch\u00e9p nhanh h\u01a1n c\u00e1c ph\u01b0\u01a1ng ph\u00e1p FileChannel kh\u00e1c (ch\u1eb3ng h\u1ea1n nh\u01b0 s\u1eed d\u1ee5ng ph\u01b0\u01a1ng ph\u00e1p ByteBuffer#allocateDirect).<\/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=\"2\">ch\u01b0\u01a1ng tr\u00ecnh m\u1eabu<\/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\u3001\u30b3\u30d4\u30fc\u5148\u306e\u30d1\u30b9[destPath]\u3078<br \/>\n * \u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30d4\u30fc\u3092\u884c\u3044\u307e\u3059\u3002<br \/>\n * \u30b3\u30d4\u30fc\u51e6\u7406\u306b\u306fFileChannel#transferTo\u30e1\u30bd\u30c3\u30c9\u3092\u5229\u7528\u3057\u307e\u3059\u3002<br \/>\n * \u5c1a\u3001\u30b3\u30d4\u30fc\u51e6\u7406\u7d42\u4e86\u5f8c\u3001\u5165\u529b\u30fb\u51fa\u529b\u306e\u30c1\u30e3\u30cd\u30eb\u3092\u30af\u30ed\u30fc\u30ba\u3057\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 * @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 copyTransfer(String srcPath, String destPath)<br \/>\n    throws IOException {<\/p>\n<p>    FileChannel srcChannel = m\u1edbi<br \/>\n        FileInputStream(srcPath).getChannel();<br \/>\n    FileChannel DestChannel = m\u1edbi<br \/>\n        FileOutputStream(destPath).getChannel();<br \/>\n    th\u1eed {<br \/>\n        srcChannel.transferTo(0, srcChannel.size(), DestChannel);<br \/>\n    } Cu\u1ed1i c\u00f9ng {<br \/>\n        srcChannel.close();<br \/>\n        destChannel.close();<br \/>\n    }<\/p>\n<p>}<br \/>\n<\/textarea><\/p>\n<h2 class=\"common_title\"><a name=\"3\">ch\u1ea5p h\u00e0nh<\/a><\/h2>\n<p>\n\u0110\u1ec3 sao ch\u00e9p t\u1ec7p ch\u01b0\u01a1ng tr\u00ecnh m\u1eabu, ch\u00fang t\u00f4i \u0111\u00e3 chu\u1ea9n b\u1ecb t\u1ec7p 100 MB &quot;100M.txt&quot; ngay trong \u1ed5 C.<br \/>\nTrong ch\u01b0\u01a1ng tr\u00ecnh m\u1eabu <i>C:\\100M.txt<\/i> b\u1eb1ng c\u00e1ch sao ch\u00e9p <i>C:\\a.txt<\/i> T\u1ea1o m\u1ed9t t\u1eadp tin.<\/p>\n<p>M\u1eabu \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n trong m\u00f4i tr\u01b0\u1eddng sau.<br \/>\nH\u1ec7 \u0111i\u1ec1u h\u00e0nh: WindowsXP<br \/>\nCPU: Athlon 1.46GHz<br \/>\nB\u1ed9 nh\u1edb: 1GB<br \/>\nJRE: 1.6.4\n<\/p>\n<p>\u25c6V\u00ed d\u1ee5 th\u1ef1c thi<\/p>\n<pre class=\"sample_src\">\/** * V\u00ed d\u1ee5 th\u1ef1c thi * @param args *\/ public static void main(String[] args) { try { copyTransfer(&quot;C:\\\\100M.txt&quot;, &quot;C:\\\\a.txt&quot;); } Catch (IOException e) { e.printStackTrace(); } }\r\n<\/pre>\n<p>\u25c6K\u1ebft qu\u1ea3 th\u1ef1c hi\u1ec7n<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<p>\n\u3000<strong>FileChannel#transferTo<\/strong> Trong x\u1eed l\u00fd sao ch\u00e9p b\u1eb1ng ph\u01b0\u01a1ng ph\u00e1p<br \/>\nSao ch\u00e9p m\u1ed9t t\u1eadp tin 100 MB \u0111\u01b0\u1ee3c ho\u00e0n th\u00e0nh trong kho\u1ea3ng 3 gi\u00e2y. Ngo\u00e0i ra, m\u1ee9c s\u1eed d\u1ee5ng heap trong qu\u00e1 tr\u00ecnh sao ch\u00e9p l\u00e0 kho\u1ea3ng 300 (KB).<\/p>\n<p>Nh\u00e2n ti\u1ec7n,<a href=\"https:\/\/chat-messenger.com\/vi\/blog\/java\/sao-chep-tap-tin\/\">Sao ch\u00e9p t\u1ec7p Java (thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc b\u1ed9 \u0111\u1ec7m)<\/a>Trong ph\u01b0\u01a1ng ph\u00e1p \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u \u1edf<br \/>\nKhi ch\u00fang t\u00f4i ch\u1ec9 \u0111\u1ecbnh k\u00edch th\u01b0\u1edbc b\u1ed9 \u0111\u1ec7m hi\u1ec7u qu\u1ea3 nh\u1ea5t l\u00e0 1000KB, th\u1eddi gian x\u1eed l\u00fd l\u00e0 kho\u1ea3ng 4 gi\u00e2y v\u00e0 m\u1ee9c s\u1eed d\u1ee5ng heap l\u00e0 kho\u1ea3ng 1.300KB.\n<\/p>\n<p>\nNgay c\u1ea3 vi\u1ec7c sao ch\u00e9p t\u1ec7p theo lu\u1ed3ng c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u0103ng t\u1ed1c b\u1eb1ng c\u00e1ch \u0111i\u1ec1u ch\u1ec9nh k\u00edch th\u01b0\u1edbc b\u1ed9 \u0111\u1ec7m, do \u0111\u00f3<br \/>\nC\u00f3 th\u1ec3 n\u00f3i r\u1eb1ng kh\u00f4ng c\u00f3 nhi\u1ec1u kh\u00e1c bi\u1ec7t trong qu\u00e1 tr\u00ecnh sao ch\u00e9p m\u1ed9t t\u1eadp tin.<br \/>\nTuy nhi\u00ean, khi sao ch\u00e9p c\u00e1c t\u1ec7p l\u1edbn li\u00ean t\u1ee5c ho\u1eb7c th\u1ef1c hi\u1ec7n song song nhi\u1ec1u qu\u00e1 tr\u00ecnh sao ch\u00e9p, FileChannel c\u00f3 th\u1ec3 hi\u1ec7u qu\u1ea3 v\u1ec1 t\u1ed1c \u0111\u1ed9 x\u1eed l\u00fd v\u00e0 m\u1ee9c s\u1eed d\u1ee5ng heap.<\/p>","protected":false},"excerpt":{"rendered":"<p>Sao ch\u00e9p t\u1ec7p Java (d\u1ec5 d\u00e0ng\/nhanh ch\u00f3ng) FileChannel#transfer\u0110\u1ec3 sao ch\u00e9p t\u1ec7p b\u1eb1ng Java [\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\/vi\/wp-json\/wp\/v2\/posts\/939"}],"collection":[{"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/comments?post=939"}],"version-history":[{"count":8,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/posts\/939\/revisions"}],"predecessor-version":[{"id":1883,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/posts\/939\/revisions\/1883"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/media?parent=939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/categories?post=939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/tags?post=939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}