আমি জাভাতে কোনও স্ট্রিংকে ইনপুট স্ট্রিমরিডারে কীভাবে পরিবর্তন করব?


281

আমি কীভাবে একটি Stringমানকে রূপান্তর করতে পারি InputStreamReader?

উত্তর:


327

বাইটআরআইআইপুট স্ট্রিমটিও কৌশলটি করে:

InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );

তারপরে পাঠক রূপান্তর করুন:

InputStreamReader reader = new InputStreamReader(is);

3
আপনি প্ল্যাটফর্মের ডিফল্ট চরসেটটি উত্তরাধিকার সূত্রে পেতে পারেন
পাতলা

2
ধন্যবাদ। সম্পন্ন. প্লাটফর্মের ডিফল্ট চরসেট সনাক্ত করার সর্বোত্তম উপায় কী?
গাইডো

5
অথবা প্যারামিটার ছাড়াই গেটবাইটস () ব্যবহার করুন ... সম্ভবত এটির অস্তিত্ব থাকা উচিত নয়, তবে এটি ডিফল্ট এনকোডিংটি ব্যবহার করবে।
মাইকেল বার্গওয়ার্ড

1
ByteArrayInputStream : যেহেতু: জেডিকে ১.০ এই শ্রেণিটি "জাভা ১.৪ থেকে" অনুমান করার সামান্যতম কারণ নেই। সেই ভুল সংস্করণ নম্বরটি বিশেষত জাভা ১.৪ প্রবর্তনের সাথে অদ্ভুত NIOএবং একই সংস্করণের মধ্যে কোনও এপিআই এবং এর ধারণাগত উত্তরসূরি প্রবর্তন করা কিছুটা বোধগম্য নয়।
হলগার

61

আমি অ্যাপাচি কমন্স ক্লাসও পেয়েছি IOUtils, তাই:

InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));

35
স্ট্রিং-> বাইট [] রূপান্তর করা বা তদ্বিপরীত কোনও অক্ষর এনকোডিংয়ের উল্লেখ না করেই প্রায়শই একটি বাগ।
জোছিম সাউর

1
এটি স্ট্রিংয়ের ডিফল্ট প্ল্যাটফর্ম এনকোডিং এবং অক্ষরগুলির উপর নির্ভর করে ডেটা ক্ষতি হতে পারে। উভয় এনকোডিং এবং ডিকোডিং অপারেশনের জন্য একটি ইউনিকোড এনকোডিং নির্দিষ্ট করা আরও ভাল would : আরও বিস্তারিত জানার জন্য এই পড়ুন illegalargumentexception.blogspot.com/2009/05/...
McDowell

একটি নির্দিষ্ট এনকোডিংয়ে বাইট পেতে কেবল এনকোডিং পরামের দরকার নেই? আমি মনে করি যতক্ষণ আপনি ইনপুটস্ট্রিম রিডার কনস্ট্রাক্টরের জন্য স্ট্রিং # getBytes কলের জন্য একই এনকোডিংটি বেছে নেবেন, আপনি কোনটি বেছে নেবেন তা আসলেই গুরুত্বপূর্ণ নয়। আমি নিশ্চিত যে জোছিম এবং ম্যাকডোভেল এই নির্দিষ্ট ক্ষেত্রে ভুল হয়ে গেছে। কোনও স্ট্রিংয়ের চারপাশে ইনপুটস্ট্রিমআডারকে মোড়ানোর জন্য কোনও এনকোডিং জ্ঞানের প্রয়োজন নেই।
স্টিজন ডি উইট

4
@ স্টিজন ডি উইট - বিড়ম্বিত উত্তর আমি জানি, তবে আমি এটি দেখেছি। যদি ডিফল্ট প্ল্যাটফর্ম এনকোডিংটি স্ট্রিংয়ে কোড পয়েন্টগুলিকে সমর্থন না করে তবে ডেটা ক্ষতি হবে। যদি আপনার ডিফল্ট এনকোডিংটি ইউটিএফ -8 হয়, কোনও সমস্যা নেই। আপনি যদি উইন্ডোয় চলমান থাকেন তবে আপনি বেশিরভাগ ইউনিকোড সেটটি হারাবেন কারণ সেই জেআরইগুলি ডিগ্রিটি "এএনএসআই" এনকোডিংগুলিতে পূর্বনির্ধারিত। প্রমাণটি আমি পোস্ট করা লিঙ্কটিতে রয়েছে। new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")ক্ষতিহীন হবে।
ম্যাকডোয়েল

হুরয়ে, একটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে একটি ওয়ান-লাইনারকে… আরও বৃহত্তর ওয়ান-লাইনারে পরিণত করতে। নেই একটি এর বেহুদা রূপান্তর সম্পর্কে কথা বলার জন্য Stringএকটি মধ্যে byte[]অ্যারে ফিরে বাইট রূপান্তর করতে charগুলি তারপর ...
হোলগার

32

এটি বিশেষত কোনও ইনপুট স্ট্রিম রিডার হতে হবে? স্ট্রিংরেডার ব্যবহার সম্পর্কে কীভাবে ?

অন্যথায়, আপনি স্ট্রিংবফারআইপুট স্ট্রিম ব্যবহার করতে পারেন , তবে চরিত্র রূপান্তর সংক্রান্ত সমস্যার কারণে এটি স্ট্র্যাকড হয়েছে (এজন্য আপনার স্ট্রিংরেডার পছন্দ করা উচিত)।


16

@ ড্যান হিসাবে একই প্রশ্ন - স্ট্রিংরেডার কেন নয়?

এটি যদি ইনপুট স্ট্রিম রিডার হতে হয় তবে তা:

String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);

দুর্দান্ত, তবে ২ য় লাইনটি হওয়া উচিতbyte[] bytes = charset.getBytes();
আবিনগঞ্জ

1
আমি অভিষেককে তাই ভাবি না। আমার উদাহরণে, স্ট্রিং স্ট্রিংয়ের উদাহরণ যা আপনি ইনপুটস্ট্রিম রিডার ব্যবহার করে অ্যাক্সেস করতে চান।
টুলকিট

3

আপনি কি একটি) Readerকার্যকারিতা আউট করার চেষ্টা করছেন InputStreamReader, বা খ) InputStreamকার্যকারিতা আউট InputStreamReader? আপনি খ পাবেন না)। InputStreamReaderএকটি না InputStream

এর উদ্দেশ্য InputStreamReaderহ'ল InputStream- বাইটের উত্স - এবং এটিকে আকারে বাইটগুলি অক্ষরে ডিকোড করা Reader। আপনার ইতিমধ্যে চরগুলি হিসাবে আপনার ডেটা রয়েছে (আপনার মূল স্ট্রিং)। আপনার স্ট্রিংকে বাইটে এনকোড করা এবং বাইটগুলি অক্ষরে ডিকোড করা একটি রিযান্ট অপারেশন হবে।

আপনি যদি Readerআপনার উত্স থেকে বেরিয়ে আসার চেষ্টা করছেন তবে ব্যবহার করুনStringReader

যদি আপনি একটি পাওয়ার চেষ্টা করছেন InputStream(যা কেবল আপনাকে বাইট দেয়), IOUtils.toInputStream(..)এখানে অন্যান্য উত্তরের পরামর্শ অনুসারে অ্যাপাচি কমন্স ব্যবহার করুন।


2

আপনি ক্যাকটুস চেষ্টা করতে পারেন :

InputStream stream = new InputStreamOf(str);

তারপরে, আপনার যদি একটি দরকার হয় Reader:

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