Bir wave dosyasından bir diziye bayt okumak istiyorum. Okunan bayt sayısı dalga dosyasının boyutuna bağlı olduğundan, maksimum 1000000 boyutuna sahip bir bayt dizisi oluşturuyorum. Ancak bu, dizinin sonundaki boş değerlerle sonuçlanır. Böylece, dinamik olarak artan bir dizi oluşturmak istedim ve ArrayList'in çözüm olduğunu buldum. Ancak AudioInputStream sınıfının read() işlevi, baytları yalnızca bayt dizisine okur! Değerleri bunun yerine bir ArrayList'e nasıl geçiririm?Bir ArrayList byte listesi oluşturma
cevap
Sen gibi byte dizisi olabilir:
List<Byte> arrays = new ArrayList<Byte>();
diziler
Byte[] soundBytes = arrays.toArray(new Byte[arrays.size()]);
geri çevirmek için (Sonra
byte[]
için
Byte[]
dönüştürmek için bir dönüştürücü yazmak zorunda olacaktır).
DÜZENLEME: Sen List<Byte>
yanlış kullanıyorsunuz, ben nasıl basitçe ByteArrayOutputStream
ile AudioInputStream
okumayı göstermek sadece edeceğiz. Bir IOException
frameSize
eğer atılır
AudioInputStream ais = ....;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read;
while((read = ais.read()) != -1) {
baos.write(read);
}
byte[] soundBytes = baos.toByteArray();
PS1
eşit değildir. Bu nedenle çok gibi verileri okumak için bir bayt tampon kullanımı:
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();
***** java: 41: bulamıyor sembolü sembolü: yöntem okundu (java.util.List
Bu, derlenmiyor: 'List
@Joachim Sauer, haklısınız, “Byte” dan byte'a bir dönüşüm olması gerektiğini unutmuşum. Cevabı değiştirmek. –
ArrayList
çözüm değildir, ByteArrayOutputStream çözümdür. Bir ByteArrayOutputStream
oluşturun, baytlarınızı yazın ve sonra baytları almak için toByteArray()
'u çağırın. Böyle
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();
şey yapmalıdır: kodunuzu gibi görünmesi gerektiğine dair
Örnek
kod biraz yanlışsaList<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;
}
}
üzgünüm. Java'yı bir süredir yapmadım. Ve burada her zaman daha bayt okur bunu yapmanın alternatif yolu:
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]);
}
}
}
bir süre (doğru) döngü :)
Edit olarak uygularım Ayrıca
, dikkatli ol Her iki read() yönteminin bir IOException attığını unutmayın - bu işlem okuyucu için bir egzersiz olarak bırakılır!'' '' '' '' '' '' '' '' yi kullanmamalı ve bayt tarafından bayt okunması çok yavaştır. – Kaj
Bir dizi yerine bir “Liste” istiyor. Ayrıca, yığınlarda okuma için alternatif bir örnek verdim. –
o bir 'List' istiyor, çünkü o büyüklüğü bilmiyor. Bu, 'List' kullanmasa bile, doğru çözümdür. –
- 1. Başka bir etkinliğe byte [] listesi nasıl geçilir
- 2. ArrayList <String>'u [byte] dönüştürün []
- 3. 1D listesinden bir 2B listesi listesi oluşturma
- 4. byte için Arraylist <Object> değeri dönüştürün []
- 5. Scala oluşturma Listesi [Int]
- 6. Bir Enumerator'dan bir Java InputStream oluşturma [Array [Byte]
- 7. Bir ArrayList
- 8. ContentResolver'ı kullanarak yeni bir Çalma listesi oluşturma
- 9. Golang byte
- 10. ArrayList öğelerinin tümü başka bir ArrayList
- 11. ArrayList
- 12. arraylist
- 13. ArrayList
- 14. ArrayList
- 15. ArrayList derleyici hatası
- 16. PowerShell'de bir Diziden bir ArrayList nasıl oluşturulur?
- 17. Bir ArrayList (Java)
- 18. byte [], başka bir byte [] özel konumundan kopyalamaksızın nasıl alınır?
- 19. Parcelable ArrayList her zaman boş
- 20. Byte [] ASCII
- 21. Byte Buddy
- 22. ASP.NET MVC LİSTESİ ve aynı görünümde oluşturma
- 23. Başka bir arraylist [s] satırından arraylist [s] oluştur [0]
- 24. Moğolda dış arraylist güncellenirken bir iç arraylist değer nasıl eklenir?
- 25. HashMap (anahtar: String, value: ArrayList) ArrayList yerine bir nesne döndürür?
- 26. bir arraylist unsurları karşılaştırmak olamaz, nesnenin Arraylist içinde min bulun
- 27. PHP ile SoundCloud'da çalma listesi oluşturma
- 28. ArrayList nesneleriyle nasıl yinelenir?
- 29. i tüm öğeleri çizmek özel bir öğe listesi oluşturma
- 30. çok büyük veri kümesi benzersiz bir listesi oluşturma bellekte
Bu bayt dizisiyle yapmak istediğiniz sonraki adımlar nelerdir? Belki de o büyük geçici tampona bile ihtiyacınız yok. – pcjuzer