Potrzebuję wycinku kodu do przekonwertowania DataHandler
na byte[]
. Ta instrukcja obsługi danych zawiera Image
.Konwersja DataHandler na bajt []
Odpowiedz
Można to zrobić za pomocą poniższego kodu bez większego wysiłku przy użyciu Apache IO Commons.
final InputStream in = dataHandler.getInputStream();
byte[] byteArray=org.apache.commons.io.IOUtils.toByteArray(in);
Dzięki
Narendra
Czy jest coś takiego, czego szukasz?
public static byte[] getBytesFromDataHandler(final DataHandler data) throws IOException {
final InputStream in = data.getInputStream();
byte out[] = new byte[0];
if(in != null) {
out = new byte[in.available()];
in.read(out);
}
return out;
}
UPDATE:
podstawie komentarzu dkarp jest to nieprawidłowe. Zgodnie z docs dla InputStream
:
Zwraca liczbę bajtów, które można odczytać (lub pomijane) z tego strumienia wejściowego bez blokowania przez następny wywołującego metodę dla tego strumienia wejściowego. Następny dzwoniący może być tym samym wątkiem lub innym wątkiem.
Wygląda na to, że Costi ma poprawną odpowiedź tutaj.
private static final int INITIAL_SIZE = 1024 * 1024;
private static final int BUFFER_SIZE = 1024;
public static byte[] toBytes(DataHandler dh) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream(INITIAL_SIZE);
InputStream in = dh.getInputStream();
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = in.read(buffer)) >= 0) {
bos.write(buffer, 0, bytesRead);
}
return bos.toByteArray();
}
Uwaga! ByteArrayOutputStream.toByteArray() tworzy kopię wewnętrznej tablicy bajtów.
Można to zrobić tak:
public static byte[] toBytes(DataHandler handler) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
handler.writeTo(output);
return output.toByteArray();
}
używam tego kodu:
public static byte[] getContentAsByteArray(DataHandler handler) throws IOException {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
handler.writeTo(bos);
bos.flush();
bos.close();
bytes = bos.toByteArray();
return bytes;
}
operacja close powinna znajdować się w klauzuli finally lub należy użyć catch try 7 Java 7. –
- 1. C# - Konwersja uint na bajt []
- 2. StringBuilder i bajt konwersja
- 3. Jak stosować ScriptIntrinsicYuvToRGB (konwersja bajt [] YUV bajt [] rgba)
- 4. Konwersja Java-Convert na bajt [] bez zapisywania na dysku
- 5. JBoss: Zgodność JaxB DataHandler
- 6. Zwracany ciąg w DataHandler
- 7. Konwersja bajtów w hex do rzeczywistej bajt
- 8. Konwersja ctype bajt tablicy do bajtów
- 9. Konwersja bajt lub int do bitset
- 10. Bajt Java [] do/z Konwersja ciągów
- 11. Konwersja długiej [64] na bajt [512] w Javie?
- 12. Konwersja bajt do instancji enum w F #
- 13. Konwertuj system.data.linq.binary na bajt []
- 14. Konwertuj bajt [] na sbyte []
- 15. Java - Byte [] na bajt []
- 16. C# int na bajt []
- 17. bajt + bajt = nieznany wynik
- 18. Konwersja między dziesiętny, binarny i bajt w Swift
- 19. Konwertuj Go [] bajt na C * char
- 20. Python konwersja latin1 na UTF8
- 21. Czytaj bajt pliku na bajt i parsuj do int
- 22. Konwertuj bajt [] na Typ bufora
- 23. (Javascript) Konwertuj bajt [] na obraz
- 24. Konwertuj java.io.StringWriter na bajt [] array
- 25. Golang Konwertowanie obrazu.Image na [] bajt
- 26. Konwertuj [8] bajt na uint64
- 27. Jak przekonwertować bajt [] na InputStream?
- 28. Jak przekonwertować char na bajt?
- 29. przekonwertować cały bajt [] na uint
- 30. C# przekształcić obiekt [] na bajt [], ale jak zachować bajt jako bajt?
'InputStream.available()' jest nie nadaje się do tego celu. 'PipedInputStream' zwrócony z' DataHandler' zwraca liczbę bajtów dostępnych w buforze, zanim się zablokuje, a nie całkowity rozmiar. – dkarp
Interesujące. Widziałem ten kod w wielu miejscach podczas korzystania z usług internetowych. – Casey
Zaktualizowany, dzięki. – Casey