मैं एक बड़े बाइट सरणी को छोटे हिस्सों में विभाजित करना चाहता हूं (64 बाइट्स कहें)। इसमें मेरी मदद करो।सरणी को छोटे भागों में विभाजित करें
उत्तर
आप विधि Arrays.copyOfRange (मूल, से, करने के लिए)
public static byte[][] divideArray(byte[] source, int chunksize) {
byte[][] ret = new byte[(int)Math.ceil(source.length/(double)chunksize)][chunksize];
int start = 0;
for(int i = 0; i < ret.length; i++) {
ret[i] = Arrays.copyOfRange(source,start, start + chunksize);
start += chunksize ;
}
return ret;
}
उपयोग कर सकते हैं या के रूप में मैक्स System.arraycopy
public static byte[][] divideArray(byte[] source, int chunksize) {
byte[][] ret = new byte[(int)Math.ceil(source.length/(double)chunksize)][chunksize];
int start = 0;
for(int i = 0; i < ret.length; i++) {
if(start + chunksize > source.length) {
System.arraycopy(source, start, ret[i], 0, source.length - start);
} else {
System.arraycopy(source, start, ret[i], 0, chunksize);
}
start += chunksize ;
}
return ret;
}
यह वास्तव में मेरे लिए उपयोगी है। धन्यवाद –
सावधान रहें कि इनमें से दूसरा आखिरी खंड का "बहुत बड़ा" आवंटित प्रतीत होता है यदि स्रोत। लम्बाई chunksize का एक भी बहु नहीं है ... – rogerdpack
देखें मदद के लिए Arrays.copyOfRange सुझाव आप उपयोग कर सकते हैं। आप अपने सरणी को कई छोटे हिस्सों में विभाजित करने के लिए इसे लूप में उपयोग कर सकते हैं।
ठीक है, System.arraycopy (src, fromPos, dest, toPos, length) को आमतौर पर Arrays.copyOfRange से तेज़ माना जाता है।
byte[] source = ...read it from somewhere...;
byte[] newArray = new byte[64];
System.arraycopy(source, 0, newArray, 0, 64);
यह गलत है: यह तेजी से होने की बात नहीं है, 'Arrays। copyOfRange' 'System.arraycopy' के दौरान एक नया' सरणी 'आवंटित करता है, केवल पैरामीटर के रूप में पारित किसी अन्य' सरणी 'में तत्वों की प्रतिलिपि बनाएँ। तो दूसरे के साथ आप आवंटन को बचाते हैं .. यही कारण है कि यह तेज़ है। यदि आप 'Array.copyOfRange' की परिभाषा की जांच करते हैं तो आप देखेंगे कि यह' System.arraycopy' 'को आमंत्रित करता है .. – Jack
Yup, अभी चेक किया गया है, आप सही हैं। – bezmax
आपके पास दो विकल्प:
System.arraycopy(...)
Array.copyOfRange(...)
उन दोनों को एक ही तरह से काम करते हैं लेकिन, जबकि पहले एक एकमात्र प्रति प्रबंधन करता है, दूसरा एक करने के लिए है एक ही समय में नए खंड आवंटित करने के लिए प्रयोग किया जाता है।
मैंने उन्हें परिणामस्वरूप बेंचमार्क किया है कि System.arraycopy
तेज है यदि आप अपने सरणी को विभाजित करने से पहले सभी को एक साथ आवंटित करने का प्रबंधन करते हैं, लेकिन यदि आप उन्हें कॉपी करते हैं तो थोड़ा धीमा हो: इस मामले में आपको Array.copyOfRange
का उपयोग करना चाहिए।
बहुत रोचक बेंचमार्क दिया गया है कि Array.copyOfRange() कॉल सिस्टम System.arraycopy: http://pastebin.com/SpSyx8Cd – bezmax
यह करना होगा ...
byte[] source = new byte[2048];
byte[] target = new byte[1024];
// fill source with some data...
Array.Copy(source, buffer, 1024);
डेमियन Vash की पहली विधि (एक का उपयोग कर Arrays.copyOfRange()) पिछले टुकड़ा के अंत तक शून्य कहते हैं यदि इनपुट बिल्कुल chunksize की एक बहु नहीं है ।
आप बजाय इसका उपयोग करना चाह सकते हैं:
public static List<byte[]> divideArray(byte[] source, int chunksize) {
List<byte[]> result = new ArrayList<byte[]>();
int start = 0;
while (start < source.length) {
int end = Math.min(source.length, start + chunksize);
result.add(Arrays.copyOfRange(source, start, end));
start += chunksize;
}
return result;
}
और मामले में यह उपयोगी है, एक ही बात का उपयोग कर ArrayList की:
public static List<List<String>> divideList(List<String> source, int chunksize) {
List<List<String>> result = new ArrayList<List<String>>();
int start = 0;
while (start < source.size()) {
int end = Math.min(source.size(), start + chunksize);
result.add(source.subList(start, end));
start += chunksize;
}
return result;
}
आप कुछ स्मृति, एक मामूली संशोधन करने के लिए बचाने के लिए देख रहे हैं दमियन वाश का जवाब मदद करेगा (इस मामले में किसी भी शेष हिस्से को एक पूर्ण 64 बाइट ब्लॉक आकार आवंटित नहीं किया गया है ...)
private byte[][] splitChunks(byte[] source)
{
byte[][] ret = new byte[(int)Math.ceil(source.length/(double)CHUNK_SIZE)][];
int start = 0;
for(int i = 0; i < ret.length; i++) {
if(start + CHUNK_SIZE > source.length) {
ret[i] = new byte[source.length-start];
System.arraycopy(source, start, ret[i], 0, source.length - start);
}
else {
ret[i] = new byte[CHUNK_SIZE];
System.arraycopy(source, start, ret[i], 0, CHUNK_SIZE);
}
start += CHUNK_SIZE ;
}
return ret;
}
- 1. छवियों को भागों में विभाजित करें
- 2. छोटे भाग में 95mb JSON सरणी विभाजित करें?
- 3. स्क्रीन को तीन भागों में लंबवत कैसे विभाजित करें?
- 4. एक स्ट्रिंग को दो भागों में विभाजित करें
- 5. आप एनएसएसटींग को घटक भागों में कैसे विभाजित करते हैं?
- 6. वस्तुओं को उनके सबसे मौलिक भागों में विभाजित करना
- 7. आप सरणी को 2 भागों में कैसे विभाजित करते हैं जैसे कि दो भागों के बराबर औसत है?
- 8. कई बराबर भागों में एक मैटलैब मैट्रिक्स को विभाजित करना
- 9. मैट्रिक्स को बराबर भागों में विभाजित करने के लिए कैसे?
- 10. यादृच्छिक असमान भागों में एक संख्या को विभाजित करना
- 11. एक सरणी कैसे विभाजित करें?
- 12. यूडीपी के लिए सी ++ में सरणी कैसे विभाजित और जुड़ें?
- 13. रूबी में दिए गए चरित्र के साथ केवल दो भागों में स्ट्रिंग को कैसे विभाजित करें?
- 14. एक वेक्टर को दो छोटे सरणी में विभाजित करने का सबसे अच्छा तरीका?
- 15. अक्षर की सरणी में स्ट्रिंग को विभाजित करें?
- 16. पायथन - यादृच्छिक रूप से लगभग बराबर भागों में एक सूची को विभाजित करें
- 17. LINQ के साथ स्थिति के आधार पर एक संग्रह को भागों में विभाजित करें?
- 18. एंड्रॉइड: 2 सूची दृश्यों के साथ 2 बराबर भागों में स्क्रीन को विभाजित करें
- 19. अद्वितीय जोड़े में विभाजित सरणी
- 20. php split array को छोटे भी सरणी में
- 21. php का उपयोग करके सरणी को 2 में विभाजित/विभाजित कैसे करें?
- 22. भागों में एक समय सीमा को स्लाइसिंग
- 23. छोटे परीक्षणों के सेट पर एक परीक्षण को विभाजित करना
- 24. चरित्र जोड़े की में सरणी में विभाजित करें स्ट्रिंग
- 25. छोटे मूल्यों में छोटे अंतराल क्रम में बाइट सरणी मानों को कनवर्ट करना
- 26. जावा का उपयोग करते हुए एक wav फ़ाइल को छोटे हिस्सों में कैसे विभाजित करें?
- 27. प्रत्येक सरणी के समूह में किसी सरणी को कैसे विभाजित करें?
- 28. एंड्रॉइड टैबलेट पर स्क्रीन को विभाजित करें
- 29. मैं स्ट्रिंग को पर्ल के साथ केवल दो भागों में कैसे विभाजित कर सकता हूं?
- 30. छोटे वर्गों से बने बड़े क्षेत्र में बड़े क्षेत्र में विभाजित क्षेत्र को कैसे विभाजित किया जाए?
लगता है http://stackoverflow.com/questions/3395547/how-to-get-a-sub-array-of-array-in-java-without-copying-data/ –