আমি কীভাবে স্ট্রাক্ট সিস্টেম.বাইট বাইট [] কে সি # তে একটি সিস্টেম.আইও.স্ট্রিম অবজেক্টে রূপান্তর করব?


উত্তর:


1284

বাইট অ্যারেটিকে স্ট্রিমে রূপান্তর করার সহজতম উপায়টি MemoryStreamক্লাসটি ব্যবহার করা হচ্ছে :

Stream stream = new MemoryStream(byteArray);

19
দয়া করে মনে রাখবেন যে স্ট্রিম তৈরির এই উপায়টি সম্ভবত আদর্শ নয়: "এই নির্মাতা অন্তর্নিহিত স্ট্রিমটি প্রকাশ করে না Get msdn.microsoft.com/en-us/library/e55f3s5k.aspx
noocyte

25
@ নোসাইট তাহলে আদর্শ উপায় কী?
developerbmw

6
আপনি stream.ToArray()যদি আপনার বাইট অ্যারে ফিরে চান তবে আপনি এখনও ব্যবহার করতে পারেন।
ফ্লোরিয়ান ফিদা

2
এই জাতীয় বাইট অ্যারে থেকে একটি স্ট্রিম তৈরির সাথে কী ধরণের ওভারহেড যুক্ত? মেমরির ব্যবহারটি প্রায়শই আমি ভাবছি।
জোকুল

344

আপনি MemoryStream.Writeপদ্ধতিটি সন্ধান করছেন

উদাহরণস্বরূপ, নিম্নলিখিত কোডটি byte[]মেমরি স্ট্রিমে অ্যারের সামগ্রীগুলি লিখবে :

byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream();
stream.Write(myByteArray, 0, myByteArray.Length);

বিকল্পভাবে, আপনি বাইট অ্যারের উপর ভিত্তি করে একটি নতুন , পুনরায় আকার পরিবর্তনযোগ্য MemoryStreamঅবজেক্ট তৈরি করতে পারেন :

byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream(myByteArray);

26
এটি সেরা উত্তর। এটি সংক্ষিপ্ত এবং সমস্ত ব্যবহারিক অ্যাপ্লিকেশনগুলিকে কভার করে। এখানে উল্লিখিত হিসাবে কেবল বাইট অ্যারে ভিত্তিক কন্সট্রাক্টর ব্যবহার করে একটি গেটচা রয়েছে - ফলস্বরূপ স্ট্রিমটি আবার আকার ধারণযোগ্য নয়।
জুলদু

17
পরে স্ট্রিমটি পুনরায় সেট করতে মনে রাখবেন: স্ট্রিম.সেক (0, সিকআরগিন.বিগিন);
মিন্ এনগুইন

দয়া করে মনে রাখবেন যে প্রথম বিকল্পটি MemoryStream.Writeতখন অনেক বেশি মেমরি গ্রাস করেnew MemoryStream(myByteArray)
অ্যালেক্স

কেন, ঠিক এটি @ অজিবিট? আমার কোনও নেট নেট হয়ে গেছে অনেক বছর হয়ে গেছে, সুতরাং যদি আমি এই উত্তরটি পারফরম্যান্সে মন্তব্য করার জন্য আপডেট করতে যাই তবে আমার আরও কিছু তথ্যের প্রয়োজন need
কোডি গ্রে

2
MemoryStreamডিফল্টরূপে বাফারে অতিরিক্ত স্থান বরাদ্দ রয়েছে (ঠিক যেমন একটি তালিকার সাথে)। এটি আপনাকে ওভারলোড ব্যবহার করে সহজেই মোকাবেলা করতে পারে যা আপনাকে ক্ষমতা সেট করার অনুমতি দেয় তবে কেবলমাত্র কার্যকর যদি আপনি স্ট্রিমে কোনও ডেটা লেখার প্রত্যাশা না করেন (বা আপনি যদি জানেন যে আপনার কত অতিরিক্ত বাইটের দরকার হতে পারে) )। তবে আমি সন্দেহ করি যে জিটবিট এই বিষয়টিকে উল্লেখ করছে যে আপনি যখন byte[]কনস্ট্রাক্টর ব্যবহার করেন তখন অ্যারেটি অনুলিপি করা হয় না - MemoryStreamযুক্তিটিতে অ্যারেটিকে বোঝায়। এটি ভাল এবং খারাপ উভয়ই হতে পারে, এবং এটি এমএসডিএন-তে নথিভুক্ত নয় এমন কিছুটা লজ্জার বিষয় :)
লুয়ান

32

যে কোনও প্রবাহে লেখার জন্য সাধারণ পন্থা (কেবল নয় MemoryStream) ব্যবহার করা হয় BinaryWriter:

static void Write(Stream s, Byte[] bytes)
{
    using (var writer = new BinaryWriter(s))
    {
        writer.Write(bytes);
    }
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.