Bnlang এ ফাইল পড়া
ফাইল পড়া প্রোগ্রামের সবচেয়ে সাধারণ কাজের মধ্যে একটি।
বিল্ট-ইন io মডিউল তিনটি ফ্লেভার দেয়, সরল থেকে শক্তিশালী:
io.read_file(path)— সিঙ্ক্রোনাস; পুরো ফাইল স্ট্রিং হিসেবে ফেরত দেয়।io.read_file_async(path, cb)— অ্যাসিঙ্ক্রোনাস; ডাটা প্রস্তুত হলে কলব্যাক পায়।io.open_read(path)— স্ট্রিমিং; মেমরি-ফ্রেন্ডলি প্রসেসিং-এর জন্য ফাইল চাঙ্কে পুল করুন।
Synchronous Read
সরলতম ফর্ম। পুরো ফাইল মেমরিতে আসা পর্যন্ত ইভেন্ট লুপ ব্লক করে। স্ক্রিপ্ট এবং ছোট ফাইলের জন্য ব্যবহার করুন।
import "io" as io;
var text = io.read_file("notes.txt");
print(text);
Asynchronous Read
সাথে সাথে ফেরত আসে। পড়া শেষ হলে কলব্যাক ইনভোক হয় — প্রথম আর্গুমেন্ট এরর (বা null), দ্বিতীয়টি ফাইল কনটেন্ট।
import "io" as io;
io.read_file_async("notes.txt", function (err, data) {
if (err != null) {
print("read failed:", err);
return;
}
print("got", data.byte_length, "bytes");
});
print("scheduled — keep doing other work");
Streaming Large Files
যেসব ফাইল আরামে মেমরিতে আঁটে না, রিড স্ট্রিম খুলুন এবং চাঙ্ক পুল করুন। কলব্যাকে chunk = null মানে EOF।
import "io" as io;
var src = io.open_read("big.log");
var total = 0;
function on_chunk(err, chunk) {
if (err != null) { print("read err:", err); src.close(); return; }
if (chunk == null) {
print("done. total:", total, "bytes");
src.close();
return;
}
total = total + chunk.byte_length;
src.read(64 * 1024, on_chunk);
}
src.read(64 * 1024, on_chunk);
Best Practices
- দীর্ঘ-চলা প্রোগ্রামে (সার্ভার, ডিমন) ডিফল্ট হিসেবে
io.read_file_asyncব্যবহার করুন। - একবারের স্ক্রিপ্ট, যেখানে সহজতা গুরুত্বপূর্ণ — sync ভ্যারিয়েন্ট ব্যবহার করুন।
- কয়েক মেগাবাইটের চেয়ে বড় ফাইলের জন্য
io.open_readব্যবহার করুন, যাতে বিশাল স্ট্রিং অ্যালোকেট না হয়। - স্ট্রিম শেষ হলে সবসময়
src.close()কল করুন — না করলে OS ফাইল হ্যান্ডেল খোলা থাকবে।