Core JavaScript

Write to and Read From a Stream

This is JavaScript program demonstrates how to write to and read from a stream.

WriteReadStream.html

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width" />
		<title>XoaX.net's Javascript</title>
		<!-- Supply a transparent 1x1 favicon -->
		<link rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=">
		<script type="text/javascript" src="WriteReadStream.js"></script>
	</head>
	<body onload="Initialize()">
	</body>
</html>

WriteReadStream.js

async function Initialize() {
	// NOTE: THIS REQUIRES A WEB SERVER TO RUN
	let qBodyElement = document.body;

	let qPreInElement = document.createElement("pre");
	qPreInElement.style.color = "red";
	qBodyElement.appendChild(qPreInElement);
	let qPreOutElement = document.createElement("pre");
	qPreOutElement.style.color = "green";
	qBodyElement.appendChild(qPreOutElement);
	
	let iCharCount = 0;

	const dqStream = new ReadableStream({
		start(qController) {
			let iIntervalID = setInterval(() => {
				let cNextChar =  GetRandomChar();
				qController.enqueue(cNextChar);
				qPreInElement.innerHTML += cNextChar;
				++iCharCount;
				if (iCharCount % 100 == 0) {
					qPreInElement.innerHTML += "\n";
				}
				// End the write and read the stream.
				if (iCharCount == 400) {
					ReadStream(dqStream, qPreOutElement);
					clearInterval(iIntervalID);
				}
			}, 10);
		}, pull(qController) { // Not used
		}, cancel() {
			clearInterval(iIntervalID);
		}
	})
	
}

function GetRandomChar() {
	let caChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
	return caChars.charAt(Math.floor(Math.random() * caChars.length));
}


function ReadStream(qStream, qPreOutElement) {
	const kqReader = qStream.getReader();
	let iCharsReceived = 0;
	
	kqReader.read()
	.then(function Process({ done, value }) {
		if (done) {
			console.log("Complete");
			return;
		}
		iCharsReceived += value.length;
		
		qPreOutElement.innerHTML += value;
		if (iCharsReceived % 100 == 0) {
			qPreOutElement.innerHTML += "\n";
		}
		
		return kqReader.read().then(Process);
	});
}
 

Output

 
 

© 2007–2026 XoaX.net LLC. All rights reserved.