nodeJS 에서 파일 을 읽 고 쓰 는 방법의 차 이 를 자세히 설명 합 니 다.

서론:nodejs 에서 파일 과 관련 된 모든 작업 은 fs 모듈 에 있 고 읽 기와 쓰기 작업 은 우리 가 자주 사용 하 는 작업 입 니 다.nodejs 의 fs 모듈 은 읽 기 체 조 를 대상 으로 readFile,read,createReadStream 세 가지 방법 을 제 공 했 습 니 다.쓰기 작업 에 대해 writeFile,write,createWrite Stream 세 가지 방법 을 제 공 했 습 니 다.다음 과 같은 차이 점 을 분석 해 보 겠 습 니 다.
1.readFile 과 writeFile
1.readFile 방법 은 읽 을 파일 내용 을 캐 시 영역 에 완전히 읽 고 이 캐 시 영역 에서 파일 내용 을 읽 는 것 입 니 다.구체 적 인 작업 은 다음 과 같 습 니 다.

fs.readFile('./test.txt', 'utf8', function(err, data){
  console.log(data); 
});
이에 대응 하 는 동기 화 방법 은:

var data = fs.readFileSync('./test.txt', 'utf8');
console.log(data);
동기 화 방법 과 비동기 방법의 차 이 는 동기 화 방법 으로 실 행 된 작업 이 끝 날 때 까지 후속 코드 의 실행 을 수행 할 수 없다 는 것 이다.한편,비동기 방법 은 조작 결 과 를 리 셋 함수 의 매개 변수 로 되 돌려 줍 니 다.방법 이 호출 된 후에 후속 코드 를 즉시 실행 할 수 있 고 읽 은 후에 대응 하 는 리 셋 함 수 를 호출 할 수 있 습 니 다.
2.writeFile 방법 은 기록 할 파일 의 내용 을 캐 시 영역 에 완전 하 게 읽 은 다음 에 캐 시 영역 에 있 는 내용 을 모두 파일 에 한꺼번에 기록 하 는 것 입 니 다.동기 화 와 비동기 화 는 다음 과 같 습 니 다.

//    
fs.writeFile('./message.txt', '     ',function(err){
  if(err) console.log('       ');
  else console.log('       ');
});

//    
fs.writeFileSync('./message.txt','     ');
이상 의 읽 기와 쓰기 동작 은 Node.js 는 파일 내용 을 하나의 전체 로 보고 캐 시 구역 을 분배 하고 파일 내용 을 캐 시 구역 에 한꺼번에 읽 습 니 다.이 기간 에 Node.js 는 다른 처 리 를 수행 할 수 없습니다.따라서 큰 파일 을 읽 고 쓸 때 캐 시 영역 이 폭발 할 수 있 습 니 다.
2.read 와 write
1.read 또는 readSync 방법 으로 파일 내용 을 읽 는 것 은 파일 의 작은 내용 을 캐 시 구역 에 계속 읽 는 것 입 니 다.마지막 으로 이 캐 시 구역 에서 파일 내용 을 읽 습 니 다.구체 적 인 작업 은 다음 과 같 습 니 다.

var fs = require('fs');
fs.open('./message.txt','r',function(err,fd){
  var buf = new Buffer(225);
  //  fd     buf   
  fs.read(fd,buf,0,9,3,function(err,bytesRead,buffer){
    console.log(buf.slice(0,bytesRead).toString());
  }); 
  var buff = new Buffer(225);
  //     null            
  fs.read(fd,buff,0,3,null,function(err,bytesRead,buffer){
    console.log(buff.slice(0,bytesRead).toString());
  });

  var buffer = new Buffer(225);
  //        
  var bytesRead = fs.readFileSync(fd,buffer,0,9,3);
  console.log(bytesRead);
  console.log(buffer.slice(0,bytesRead).toString());
});

2.write 또는 writeSync 방법 으로 내용 을 기록 할 때 node.js 는 다음 과 같은 과정 을 수행 합 니 다.1.기록 해 야 할 데 이 터 를 메모리 캐 시 에 기록 합 니 다.2.캐 시 구역 이 가득 찬 후에 캐 시 구역 의 내용 을 파일 에 기록 합 니 다.3 반복 실행 절차 1 과 절차 2,데이터 가 모두 파일 에 기 록 될 때 까지.구체 적 인 조작 은 다음 과 같다.

var fs = require('fs');
var buf = new Buffer('     ');
fs.open('./mess.txt','w',function(err,fd){
  fs.write(fd,buf,3,9,0,function(err,written,buffer){
    fs.write(fd,buf,12,3,null,function(err,written,buffer){
      if(err) console.log('       ');
      console.log('       ');
    });
  });
  //    
  fs.writeSync(fd,buf,3,9,0);
});
이상 의 읽 기와 쓰기 동작 은 node.js 에서 파일 을 하나씩 나 누 어 점차적으로 조작 하고 파일 을 읽 고 쓰 는 과정 에서 다른 작업 을 수행 할 수 있 습 니 다.
그러나 어떤 때 는 전체 파일 의 내용 에 관심 이 없고 파일 에서 읽 은 일부 데이터 와 데 이 터 를 읽 을 때 실행 해 야 할 처리 에 만 관심 이 있 을 때 파일 흐름 으로 처리 할 수 있 습 니 다.
3.createReadStream 과 createWrite Stream
1.createReadStream 방법 은 파일 내용 을 스 트림 데이터 로 읽 는 ReadStream 대상 을 만 듭 니 다.방법 은 다음 과 같 습 니 다.

var fs = require('fs');
var readStream = fs.createReadStream('./message.txt',{start:3,end:12});
readStream.on('open',function(fd){
  console.log('      ');
});
readStream.on('data',function(data){
  console.log('     :');
  console.log(data);
});
readStream.on('end',function(){
  console.log('         ');
});
readStream.on('close',function(){
  console.log('     ');
});
readStream.on('error',function(err){
  console.log('      ');
});
2.createWriteStream 방법 은 스 트림 데 이 터 를 파일 에 기록 하 는 WriteStream 대상 을 만 듭 니 다.방법 은 다음 과 같 습 니 다.

var fs = require('fs');
var file = fs.createReadStream('./message.txt');
var out = fs.createWriteStream('./anotherMessage.txt');
file.on('data',function(data){
  out.write(data);
});
out.on('open',function(fd){
  console.log('           ');
});
file.on('end',function(){
  //                  
  out.end('  ',function(){
    console.log('        ');
    console.log('   '+out.bytesWritten+'  ');
  });
});
이상 의 방법 은 파일 을 읽 고 쓰 는 과정 에서 감청 할 수 있 으 며,관련 방법 pause 와 resume 이 파일 의 읽 기 동작 을 일시 정지 하거나 복원 할 수 있 습 니 다.기록 할 때 캐 시 영역 데이터 가 가득 찼 거나 모두 출력 되 었 는 지 감청 할 수 있 습 니 다.다음 과 같 습 니 다.

//  writeStream   drain  
var fs = require('fs');
var out = fs.createWriteStream('./test1.txt');
for(var i=0;i<10000;i++){
  //  true false true       
  var flag = out.write(i.toString());
  console.log(flag);
}
out.on('drain',function(){
  console.log('                ');
  var out = fs.createWriteStream('./test2.txt');
  for(var i=0;i<10;i++){
    var flag = out.write(i.toString());
    console.log(flag);
  }
  out.on('drain',function(){
    console.log('                ');
  });
});
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기