鏈枃浠嬬粛鐐硅禐+鍏虫敞+鏀惰棌=浜嗚В鍒癝tream鏄竴涓蹇碉紝缈昏瘧鎴愪腑鏂囧氨鏄€滄祦鈥濈殑鎰忔€濄€傚畠涓嶆槸NodeJS鐙湁鐨勩€傛湰鏂囦互NodeJS涓轰緥鏉ヨ鏄嶴tream銆係tream绠€浠嬪湪浼犺緭澶ф枃浠躲€佽棰戙€侀煶棰戞椂锛岄€氬父鏄垎娈典紶杈撱€傝繖涓蹇靛彲浠ュぇ鑷寸悊瑙d负Stream銆係tream鐨勪腑鏂囨剰鎬濇槸鈥滄祦鈥濄€傚湪缃戜笂鎵句簡涓€寮犲浘寰堝ソ鐨勮В閲婁簡杩欎釜涓滆タ銆備綘鎯虫€庝箞鍙栧氨鎬庝箞鍙栵紝鎴戜滑鍦ㄤ娇鐢∟odeJS鐨勬椂鍊欎笉闇€瑕佸叧蹇冭繖涓紶杈撹繃绋嬶紝鍥犱负NodeJS鎻愪緵浜嗙浉搴旂殑鏂规硶鏉ュ鐞嗐€傘€奛odeJS http璇锋眰銆嬩腑鎻愬埌鐨凱OST鏂规硶鍏跺疄灏辨槸鍒╃敤浜嗚繖涓蹇点€係tream鐨勪娇鐢ㄦ垜浠ュ鍒舵枃浠跺唴瀹逛负渚嬫潵璇存槑Stream銆傚鏋滄枃浠跺唴瀹规瘮杈冨皯锛屾垜浠彲浠ヤ竴娆℃€у叏閮ㄥ鍒惰繃鏉ャ€備絾濡傛灉鏂囦欢鍐呭杈冨锛屾渶濂戒娇鐢ㄢ€滃垎鍖呪€濆鍒舵柟寮忋€侼odeJS涓烘垜浠鐞嗕簡杩欎釜銆傛垜鍑嗗浜?涓枃浠讹紝瀹冧滑鏄痠ndex.js銆乨ata.txt鍜宒ata-backup.txt銆俰ndex.js鏄啓JS鎿嶄綔浠g爜鐨勬枃浠禿ata.txt鏄暟鎹枃浠禿ata-backup.txt鏄浠芥暟鎹枃浠讹紝榛樿涓虹┖data.txt鏂囦欢鍐呭1234567890鍙湁杩?0涓暟瀛梚ndex.js鏂囦欢鍐呭constfs=require('fs')constpath=require('path')constfileName1=path.resolve(__dirname,'data.txt')constfileName2=path.resolve(__dirname,'data-backup.txt')const璇诲彇娴?fs.createReadStream(fileName1)constwriteStream=fs.createWriteStream(fileName2)readStream.pipe(writeStream)letcount=0readStream.on('data',chunk=>{console.log(`${++count}浼犺緭`)console.log(chunk.toString())})readStream.on('end',()=>{console.log('copycomplete')})瑙f瀽锛氶鍏堝紩鍏s鍜宲ath妯″潡锛屽彲浠ユ墽琛屾枃浠跺鐞嗘搷浣滆幏鍙杁ata.txt鍜宒ata-backup.txt鏂囦欢锛屽垎鍒祴鍊肩粰fileName1鍜宖ileName2浣跨敤pipe鏂瑰紡灏哾ata.txt鐨勫唴瀹规祦鍒癲ata-backup.txt浣跨敤count璁$畻鍒嗗寘涓暟浣跨敤on-data鐩戝惉鏁版嵁浼犺緭璇ヨ繘绋嬩娇鐢╫n-end鐩戝惉鏁版嵁浼犺緭瀹屾垚銆傝繖鏃跺€欒繍琛宨ndex.js锛屾帶鍒跺彴浼氳緭鍑虹涓€涓紶杈?234567890锛屽綋鍐呭姣旇緝灏戠殑鏃跺€欙紝鐪嬩笉鍑篠tream鐨勪綔鐢ㄣ€備絾鏄鏋滄鏃跺鍔燿ata.txt鐨勫唴瀹癸紝姣斿閲岄潰鏈?0涓囦釜瀛椼€傜劧鍚庡氨鍙互鐪嬪埌Stream鐨勪綔鐢ㄤ簡銆傚湪VSCode涓紝灏哾ata.txt鐨勮瑷€妯″紡鏀逛负HTML锛岀劧鍚庤緭鍏orem100000鍥炶溅锛岃嚜鍔ㄨ緭鍏?0涓囧瓧銆俵orem鍚庨潰鍔犵殑鏁板瓧灏辨槸瑕佽緭鍏ョ殑wordbook銆傚洖杞﹀悗淇濆瓨data.txt锛岀劧鍚庢墽琛宨ndex.js銆傛鏃舵墦寮€鎺у埗鍙帮紝鍙互鐪嬪埌鍒嗗寘鎯呭喌銆備互涓婂氨鏄Stream鐨勭畝鍗曚粙缁嶃€傛€荤粨涓€涓嬶紝Stream鍙互鐞嗚В涓哄垎鍖咃紝鈥渟tream鈥濈殑鎰忔€濇槸涓€鐐圭偣娴佽繃鏉ワ紝鑰屼笉鏄竴涓嬪瓙鎶婃墍鏈変笢瑗块兘鎼繃鍘汇€備綘鍙互鎯宠薄鎼鐨勬儏鍐点€傚鏋滃湪涓€涓湴鏂逛綇浜嗕竴娈垫椂闂达紝鐢熸椿鐢ㄥ搧銆佸鍏风瓑涓滆タ姣旇緝澶氾紝涓€涓嬪瓙鍏ㄩ儴鎼蛋鍩烘湰鏄笉鍙兘鐨勩€傚钩鏃堕渶瑕佹妸涓滆タ涓€浠朵欢鏀舵嬀濂斤紝鐒跺悗鎶婁欢鎼笅妤硷紝鍐嶆斁鍒拌溅閲屽甫璧般€傝繖灏辨槸Stream鐨勬蹇点€傚彟涓€涓緥瀛愭槸鐢佃鐩存挱銆傚鏋滀綘鎶婄洿鎾殑鍐呭閮藉綍涓嬫潵锛屾墦鍖呭彂缁欎綘鐨勫鎴凤紝灏辨病娉曠洿鎾簡鍚э紵閫氬父浣犲彂閫佸灏戝氨璁板綍澶氬皯銆傛帹鑽愰槄璇火煈嶃€奛odeJS http璇锋眰銆嬸煈嶃€奛odeJS 5鍒嗛挓 杩炴帴MySQL 澧炲垹鏀规煡銆嬸煈嶃€奛odeJS 鎿嶄綔cookie銆嬸煈嶃€奛odeJS 5鍒嗛挓 杩炴帴 Redis 璇诲啓鎿嶄綔銆嬸煈嶃€奛odeJS 璇诲啓鏂囦欢銆嬬偣璧?鍏虫敞+鏀惰棌=瀛︿範浜?/p>
