का एक ऐरेलिस्ट बनाएं, मैं एक लहर फ़ाइल से बाइट को सरणी में पढ़ना चाहता हूं। चूंकि बाइट्स पढ़ने की संख्या तरंग फ़ाइल के आकार पर निर्भर करती है, इसलिए मैं 1000000 के अधिकतम आकार के साथ एक बाइट सरणी बना रहा हूं। लेकिन इसके परिणामस्वरूप सरणी के अंत में खाली मान होते हैं। तो, मैं एक गतिशील रूप से बढ़ती सरणी बनाना चाहता था और मैंने पाया कि ऐरेलिस्ट समाधान है। लेकिन AudioInputStream क्लास के read() फ़ंक्शन बाइट्स को केवल बाइट सरणी में पढ़ता है! मैं मानों को इसके बजाय ArrayList में कैसे पास करूं?बाइट्स
बाइट्स
उत्तर
आप की तरह बाइट की एक सरणी हो सकता है:
List<Byte> arrays = new ArrayList<Byte>();
यह सरणियों
Byte[] soundBytes = arrays.toArray(new Byte[arrays.size()]);
वापस करने के लिए परिवर्तित करने के लिए (उसके बाद, आप byte[]
को Byte[]
को बदलने के लिए एक कनवर्टर लिखने के लिए होगा)।
संपादित करें: आप List<Byte>
गलत प्रयोग कर रहे हैं, मैं तुम्हें कैसे बस ByteArrayOutputStream
साथ AudioInputStream
पढ़ने के लिए सिर्फ दिखाएंगे।
AudioInputStream ais = ....;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read;
while((read = ais.read()) != -1) {
baos.write(read);
}
byte[] soundBytes = baos.toByteArray();
पुनश्च एक IOException
अगर frameSize
फेंक दिया जाता है 1
के बराबर नहीं है। इसलिए तो की तरह, डेटा को पढ़ने के लिए एक बाइट बफर का उपयोग करें:
AudioInputStream ais = ....;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while((bytesRead = ais.read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
byte[] soundBytes = baos.toByteArray();
***** जावा: 41: प्रतीक नहीं मिल सकता प्रतीक: विधि पढ़ें (java.util.List
यह संकलित नहीं करता है: 'सूची
@ जोचिम सॉर, आप सही हैं, मैं भूल गया था कि 'बाइट' से बाइट तक रूपांतरण होना आवश्यक है। उत्तर संशोधित करना –
ArrayList
समाधान नहीं है, ByteArrayOutputStream समाधान है। ByteArrayOutputStream
इसे अपने बाइट्स लिखें, और फिर बाइट प्राप्त करने के लिए toByteArray()
का आह्वान करें।
in = new BufferedInputStream(inputStream, 1024*32);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] dataBuffer = new byte[1024 * 16];
int size = 0;
while ((size = in.read(dataBuffer)) != -1) {
out.write(dataBuffer, 0, size);
}
byte[] bytes = out.toByteArray();
कुछ इस तरह करना चाहिए: क्या अपने कोड की तरह दिखना चाहिए की
उदाहरण
अगर कोड एक सा गलत हैList<Byte> myBytes = new ArrayList<Byte>();
//assuming your javax.sound.sampled.AudioInputStream is called ais
while(true) {
Byte b = ais.read();
if (b != -1) { //read() returns -1 when the end of the stream is reached
myBytes.add(b);
} else {
break;
}
}
क्षमा करें। मैंने थोड़ी देर के लिए जावा नहीं किया है। और यहाँ है कि और अधिक बाइट्स हर बार पढ़ता है यह कर का एक वैकल्पिक तरीका है::
int arrayLength = 1024;
List<Byte> myBytes = new ArrayList<Byte>();
while(true) {
Byte[] aBytes = new Byte[arrayLength];
int length = ais.read(aBytes); //length is the number of bytes read
if (length == -1) { //read() returns -1 when the end of the stream is reached
break; //or return if you implement this as a method
} else if (length == arrayLength) { //Array is full
myBytes.addAll(aBytes);
} else { //Array has been filled up to length
for (int i = 0; i < length; i++) {
myBytes.add(aBytes[i]);
}
}
}
इसके अलावा, सावधान यदि आप थोड़ी देर के (सही) पाश :)
संपादित के रूप में यह लागू करते हो ध्यान दें कि दोनों पढ़ने() विधियों को IOException फेंक देते हैं - इसे संभालने के लिए पाठक के लिए अभ्यास के रूप में छोड़ा जाता है!
उसे 'बाइट' की 'सूची' का उपयोग नहीं करना चाहिए, और बाइट द्वारा बाइट पढ़ना बहुत धीमा है। – Kaj
वह एक सरणी के बजाय 'सूची' चाहता है। इसके अलावा, मैंने भाग में पढ़ने के लिए एक वैकल्पिक उदाहरण प्रदान किया है। –
वह एक 'सूची' चाहता है क्योंकि वह आकार के सामने के बारे में नहीं जानता है। यह सही समाधान है, यहां तक कि 'हालांकि यह' सूची 'का उपयोग नहीं करता है। –
- 1. बाइट्स
- 2. बाइट्स
- 3. बाइट्स
- 4. बाइट्स
- 5. बाइट्स
- 6. 28 बाइट्स?
- 7. एचटीपी बाइट्स
- 8. रूबी: बाइट्स
- 9. 8192 बाइट्स
- 10. कैसे बाइट्स
- 11. 1024 बाइट्स
- 12. बाइट्स इनलाइन
- 13. "मानचित्र उत्पादन materialized बाइट्स" बनाम "उत्पादन बाइट्स के नक्शे"
- 14. जावा: बाइट्स की सूची बाइट्स की सरणी में कनवर्ट करें
- 15. एक्सकोड इंस्ट्रूमेंट्स आवंटन: लाइव बाइट्स या कुल मिलाकर बाइट्स देखें?
- 16. सी ++ 4 बाइट्स
- 17. रूबी - 2 बाइनरी बाइट्स
- 18. ifstream, बाइट्स पढ़ते हैं?
- 19. बिट बाइट 8 बाइट्स
- 20. प्रति इनोड कितने बाइट्स?
- 21. लाइव बाइट्स बनाम आईओएस
- 22. बाइट्स जावास्क्रिप्ट/jQuery
- 23. जावा बाइट्स को समझना
- 24. Zend_Search_Lucene 3503812093817007931 बाइट्स
- 25. लिखें मौजूदा बाइट्स
- 26. BufferedImage बाइट्स जावा
- 27. मैं सभी ट्रांसफर बाइट्स
- 28. फ़ाइलों को शून्य बाइट्स
- 29. 2 बाइट्स को
- 30. MemoryStream और बाइट्स
उस बाइट सरणी के साथ आप अगले चरण क्या करना चाहते हैं? शायद आपको उस बड़े अस्थायी बफर की भी आवश्यकता नहीं है। – pcjuzer