Node.js에서 버퍼를 읽기 가능한 스트림으로 변환
나는 입력으로 사용되는 라이브러리가 있습니다.ReadableStream
하지만 내 입력은 base64 형식의 이미지일 뿐입니다.제가 가지고 있는 데이터를 변환할 수 있습니다.Buffer
이와 같이:
var img = new Buffer(img_string, 'base64');
하지만 어떻게 변환해야 할지 모르겠습니다.ReadableStream
또는 변환합니다.Buffer
내가 얻은 것은ReadableStream
.
이것을 할 수 있는 방법이 있습니까?
nodejs 10.17.0 이상의 경우:
const { Readable } = require('stream');
const stream = Readable.from(myBuffer);
이런 것들...
import { Readable } from 'stream'
const buffer = new Buffer(img_string, 'base64')
const readable = new Readable()
readable._read = () => {} // _read is required but you can noop it
readable.push(buffer)
readable.push(null)
readable.pipe(consumer) // consume the stream
일반적인 과정에서, 읽을 수 있는 스트림은_read
함수는 기본 소스로부터 데이터를 수집해야 합니다.push
필요하기 전에 대용량 소스를 메모리에 수집하지 않도록 점진적으로 보장합니다.
이 경우 이미 메모리에 소스가 있지만,_read
필요하지 않습니다.
전체 버퍼를 누르면 읽을 수 있는 스트림 API로 압축됩니다.
노드 스트림 버퍼는 분명히 테스트에 사용하도록 설계되었습니다. 지연을 방지할 수 없기 때문에 프로덕션 용도로는 적합하지 않습니다.
가브리엘 라마는 다음과 같은 답변에서 스트리머를 제안합니다.버퍼를 스트림2 읽기 가능한 스트림으로 랩하는 방법?
다음과 같은 노드 스트림 버퍼를 사용하여 ReadableStream을 만들 수 있습니다.
// Initialize stream
var myReadableStreamBuffer = new streamBuffers.ReadableStreamBuffer({
frequency: 10, // in milliseconds.
chunkSize: 2048 // in bytes.
});
// With a buffer
myReadableStreamBuffer.put(aBuffer);
// Or with a string
myReadableStreamBuffer.put("A String", "utf8");
주파수는 0일 수 없으므로 특정 지연이 발생합니다.
표준 노드를 사용할 수 있습니다.이 - 스트림에 대한 JS 스트림 API입니다.읽을 수 있는.에서
const { Readable } = require('stream');
const stream = Readable.from(buffer);
참고: 버퍼를 문자열로 변환하지 않음(
buffer.toString()
) 버퍼에 이진 데이터가 포함된 경우.이진 파일이 손상될 수 있습니다.
단일 파일에 대해 전체 npm lib를 추가할 필요가 없습니다. 유형 스크립트에 리팩터링했습니다.
import { Readable, ReadableOptions } from "stream";
export class MultiStream extends Readable {
_object: any;
constructor(object: any, options: ReadableOptions) {
super(object instanceof Buffer || typeof object === "string" ? options : { objectMode: true });
this._object = object;
}
_read = () => {
this.push(this._object);
this._object = null;
};
}
노드 스트림 식별자(위에서 언급한 최선의 옵션)를 기반으로 합니다.
여기에 스트리머 모듈을 사용한 간단한 솔루션이 있습니다.
const streamifier = require('streamifier');
streamifier.createReadStream(new Buffer ([97, 98, 99])).pipe(process.stdout);
문자열, 버퍼 및 개체를 인수로 사용할 수 있습니다.
이것은 저의 간단한 코드입니다.
import { Readable } from 'stream';
const newStream = new Readable({
read() {
this.push(someBuffer);
},
})
사용해 보십시오.
const Duplex = require('stream').Duplex; // core NodeJS API
function bufferToStream(buffer) {
let stream = new Duplex();
stream.push(buffer);
stream.push(null);
return stream;
}
출처: 브라이언 맨시니 -> http://derpturkey.com/buffer-to-stream-in-node/
언급URL : https://stackoverflow.com/questions/13230487/converting-a-buffer-into-a-readablestream-in-node-js
'programing' 카테고리의 다른 글
Android TextView에서 텍스트 오른쪽 정렬 (0) | 2023.08.04 |
---|---|
자동 완성 플러그인 결과를 사용자 지정하는 방법은 무엇입니까? (0) | 2023.08.04 |
Android에서 텍스트 편집 비활성화 (0) | 2023.08.04 |
C에서 '0'을 빼면 문자가 나타내는 숫자가 되는 이유는 무엇입니까? (0) | 2023.08.04 |
jQuery에서 입력 파일이 비어 있는지 확인하는 방법 (0) | 2023.08.04 |