जावा 8 में java.util.stream.Stream और java.util.stream.IntStream प्रकार हैं। java.util.Arrays, एक विधिएक बाइट सरणी को इंटस्ट्रीम में बदलने का सबसे अच्छा तरीका क्या है?
IntStream is = Arrays.stream(int[])
लेकिन ऐसी कोई विधि एक बाइट [] से एक IntStream बनाने के लिए है कम [] या चार [], किसी पूर्णांक पर प्रत्येक तत्व को चौड़ा। क्या बाइट [] से इंटस्ट्रीम बनाने के लिए कोई बेवकूफ/पसंदीदा तरीका है, इसलिए मैं बाइट एरे पर एक कार्यात्मक तरीके से काम कर सकता हूं?
मैं निश्चित रूप से तुच्छता बाइट [] [] int करने के लिए मैन्युअल रूप से और प्रयोग Arrays.stream (int []), या का उपयोग IntStream.Builder परिवर्तित कर सकते हैं:
public static IntStream stream(byte[] bytes) {
IntStream.Builder isb = IntStream.builder();
for (byte b: bytes)
isb.add((int) b);
return isb.build();
}
लेकिन न तो की वजह से बहुत कार्यात्मक है स्रोत की प्रतिलिपि।
एक इनपुटस्ट्रीम (या इस मामले में एक बाइटएरे इनपुट इनपुट) को इंटस्ट्रीम में परिवर्तित करने का एक आसान तरीका प्रतीत नहीं होता है, जो कार्यात्मक रूप से इनपुटस्ट्रीम को प्रोसेस करने के लिए बहुत उपयोगी होगा। (चमकती चमक?)
क्या कोई और अधिक कार्यात्मक तरीका है जो कुशल है और प्रतिलिपि नहीं करता है?
हर 'byte' एक' int' विचार किया जाना चाहिए? या हर 4 बाइट्स को 'int' माना जाना चाहिए? –
प्रत्येक बाइट एक int के लिए चौड़ा है। उदाहरण के लिए, मैं एक फ़ाइल या अन्य बाइट स्ट्रीम में सभी बाइट्स के हिस्टोरोग की गणना करना चाहता हूं। – djb
स्ट्रीम एपीआई का उपयोग करके इनपुट इनपुट से बाइट्स क्यों पढ़ना चाहते हैं? इनपुटस्ट्रीम पढ़ता अनुक्रमिक है, पुरानी विधि का उपयोग करके पढ़ने के लिए यह बहुत तेज़ है, क्योंकि आप किसी भी तरह से व्यक्तिगत बाइट्स की ऑर्डर की गई धारा को समानांतर नहीं कर सकते हैं। आपको एक इनपुटस्ट्रीम के समांतर प्रसंस्करण * भाग * से बहुत लाभ हो सकता है ... –