ইনপুটস্ট্রিম বা আউটপুট স্ট্রিমে বাইট []


129

আমি আমার ডাটাবেস সারণিতে একটি ছিটে কলাম আছে, যার জন্য আমি ব্যবহার করতে হবে byte[]একটি ম্যাপিং হিসাবে আমার জাভা প্রোগ্রাম এবং এই তথ্য আমি ব্যবহার করার জন্য এটি রূপান্তর InputStreamবা OutputStream। তবে আমি জানিনা যখন আমি এটি করি তখন অভ্যন্তরীণভাবে কী ঘটে। আমি যখন এই রূপান্তরটি করি তখন কি কেউ সংক্ষেপে আমাকে ব্যাখ্যা করতে পারেন?


2
শিরোনামটি "বাইটের অ্যারে ..." বা "বাইট অ্যারে ..." বা "বাইট [] ..." "বাইট অফ অ্যারে ..." এর ইনস্টাড হওয়া উচিত নয়?
kuester2000

1
বিপরীতটি এখানে দেখুন: stackoverflow.com/questions/1264709/…
জে টেলর

উত্তর:


198

আপনি বাইট অ্যারে I / O স্ট্রিমগুলি তৈরি এবং ব্যবহার করুন:

byte[] source = ...;
ByteArrayInputStream bis = new ByteArrayInputStream(source);
// read bytes from bis ...

ByteArrayOutputStream bos = new ByteArrayOutputStream();
// write bytes to bos ...
byte[] sink = bos.toByteArray();

ধরে নেওয়া যাক যে আপনি একটি JDBC ড্রাইভার ব্যবহার করছেন যে কার্যকরী মান JDBC এর ব্লব ইন্টারফেস (সমস্ত না), আপনি করতে পারেন এছাড়াও একটি সংযোগ InputStreamবা OutputStreamব্যবহার করে একটি ফোঁটা থেকে getBinaryStreamএবং setBinaryStreamপদ্ধতি 1 , এবং আপনি পেতে এবং সেট সরাসরি বাইট পারবেন না।

(সাধারণভাবে, কোনও ব্যতিক্রম, এবং বন্ধ স্ট্রিমগুলি পরিচালনা করার জন্য আপনার যথাযথ পদক্ষেপ নেওয়া উচিত However তবে, বন্ধ করা bisএবং bosউপরের উদাহরণে অপ্রয়োজনীয়, যেহেতু এগুলি কোনও বাহ্যিক সংস্থার সাথে সম্পর্কিত নয়; যেমন ফাইল বর্ণনাকারী, সকেট, ডাটাবেস সংযোগ।)

1 - setBinaryStreamপদ্ধতিটি সত্যই একজন প্রাপ্তি। চিত্রে যান.


13

আমি ধরে নিচ্ছি আপনার অর্থ 'ব্যবহার' এর অর্থ পড়ার অর্থ, তবে পড়ার ক্ষেত্রে আমি যা ব্যাখ্যা করব তা মূলত লেখার ক্ষেত্রে বিপরীত হতে পারে।

সুতরাং আপনি একটি বাইট দিয়ে শেষ []। এটি কোনও ধরণের ডেটা উপস্থাপন করতে পারে যার জন্য বিশেষ ধরণের রূপান্তরগুলির প্রয়োজন হতে পারে (চরিত্র, এনক্রিপ্ট করা ইত্যাদি)। আসুন আপনি এই ফাইলটি কোনও ফাইলের মতোই লিখতে চান তা ভান করি।

প্রথমত আপনি একটি বাইটআরআইআইপুট স্ট্রিম তৈরি করতে পারেন যা মূলত ক্রমানুসারে কিছুতে বাইট সরবরাহ করার ব্যবস্থা mechanism

তারপরে আপনি যে ফাইলটি তৈরি করতে চান তার জন্য আপনি একটি ফাইলআউটপুট স্ট্রিম তৈরি করতে পারেন। বিভিন্ন ডেটা উত্স এবং গন্তব্যগুলির জন্য অনেক ধরণের ইনপুট স্ট্রিম এবং আউটপুট স্ট্রিম রয়েছে।

শেষ পর্যন্ত আপনি আউটপুট স্ট্রিমে ইনপুট স্ট্রিম লিখবেন। এই ক্ষেত্রে, বাইটের অ্যারেটি লেখার জন্য ফাইলআউটপুট স্ট্রিমের ধারাবাহিকতায় প্রেরণ করা হত। এর জন্য আমি আইওউটিস ব্যবহার করার পরামর্শ দিচ্ছি

byte[] bytes = ...;//
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(new File(...));
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);

এবং বিপরীতে

FileInputStream in = new FileInputStream(new File(...));
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
byte[] bytes = out.toByteArray();

আপনি যদি উপরের কোড স্নিপেটগুলি ব্যবহার করেন তবে আপনাকে ব্যতিক্রমগুলি পরিচালনা করতে হবে এবং আমি আপনাকে শেষ অবধি 'ক্লোজস' করার পরামর্শ দিচ্ছি recommend


আপনি কি বলতে চাইছেন না - বাইটআররেআউটপুট স্ট্রিম আউট = নতুন বাইটআরআউটপুট স্ট্রিম (); পরিবর্তে বাইটআরআউটপুট স্ট্রিম আউট = নতুন বাইটআরআইআইপুটস্ট্রিম ();
অভিহাই মার্চিয়ানো

ক্লোজকুয়েটলি সম্ভবত শেষ অবধি থাকা উচিত।
জাস্টিন কেএসইউ

5

আমরা বাইটআরআইএনপুট স্ট্রিম ব্যবহার করে বাইট [] অ্যারে ইনপুট স্ট্রিমে রূপান্তর করতে পারি

String str = "Welcome to awesome Java World";
    byte[] content = str.getBytes();
    int size = content.length;
    InputStream is = null;
    byte[] b = new byte[size];
    is = new ByteArrayInputStream(content);

পুরো উদাহরণের জন্য দয়া করে এখানে দেখুন http://www.onlinecodegeek.com/2015/09/how-to-convers-byte-into-inputstream.html


4

ইনপুটস্ট্রিম / আউটপুট স্ট্রিম এবং তারা যে বাইটগুলির সাথে কাজ করছে তাতে কোনও রূপান্তর নেই। এগুলি বাইনারি ডেটার জন্য তৈরি করা হয় এবং কেবল একের পর এক বাইটগুলি পড়ুন (বা লিখুন)।

আপনি যখন বাইট থেকে চরে যেতে চান তখন একটি রূপান্তর ঘটতে হবে। তারপরে আপনাকে একটি অক্ষর সেট ব্যবহার করে রূপান্তর করতে হবে। অক্ষর ডেটা জন্য তৈরি করা বাইটগুলি থেকে আপনি স্ট্রিং বা রিডার তৈরি করার সময় এটি ঘটে।


1
output = new ByteArrayOutputStream();
...
input = new ByteArrayInputStream( output.toByteArray() )

0

আমি বুঝতে পারি যে আমার উত্তর এই প্রশ্নের জন্য পথ দেরি হয়ে গেছে না কিন্তু আমি মনে করি সম্প্রদায় চাই এই সমস্যাটি একটি নতুন পদ্ধতির


বিজ্ঞপ্তি বাফারগুলি ওপির সমস্যা সমাধান করে না। প্রশ্নে লিখিত হিসাবে, ওপিকে সম্পূর্ণ একক বাইট অ্যারেতে সামগ্রীর প্রয়োজন হয় ।
স্টিফেন সি

0
byte[] data = dbEntity.getBlobData();
response.getOutputStream().write();

আমি মনে করি এটি ইতিমধ্যে যেহেতু প্রতিক্রিয়া অবজেক্টে আপনার ইতিমধ্যে একটি আউটপুট স্ট্রিম রয়েছে। নতুন আউটপুট স্ট্রিম তৈরি করার দরকার নেই।

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