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 ফাইল হ্যান্ডেল খোলা থাকবে।