| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Преобразование битового потока в массив даблов |
| Автор: TieRR 26.3.2008, 13:20 |
| Собственно, как это реализовать? |
| Автор: LSD 26.3.2008, 13:43 | ||
В простейшем случае:
|
| Автор: TieRR 26.3.2008, 14:17 | ||
Сорри, не уточнил: чтение двоичного потока из бд. Вот код, который надо исправить:
|
| Автор: LSD 26.3.2008, 15:44 |
| 1. Порядок байт какой? 2. Откуда берется InputStream совершенно без разницы, из БД, файла. 3. Что не так с этим кодом? |
| Автор: TieRR 26.3.2008, 15:55 |
| Проблема в том, что после этих преобразований в массиве хранятся одни нули. |
| Автор: LSD 26.3.2008, 16:00 |
| Почему там используется Float, ты же говорил что там лежат double? |
| Автор: TieRR 26.3.2008, 16:13 |
| ну потому что только у флоата нашел такой метод преобразования битов... Поэтому и вопрос стоит о приведения к даблу, так как не знаю как) |
| Автор: LSD 26.3.2008, 16:18 |
| А Double.longBitsToDouble() это что? И чем тебя не устраивает тот способ, что я показал? Зачем нужен свой велосипед? |
| Автор: TieRR 26.3.2008, 16:24 |
| так а в качестве параметра что использовать тогда? |
| Автор: LSD 26.3.2008, 16:45 |
| Для начала прекрати изобретать велосипед и используй readDouble(). |
| Автор: alexadr 26.3.2008, 17:10 | ||||
Я бы просто подебажил ентот код, - пораспечатывал бы каждый байт в виде двоичной строки. Распечатал бы получившийся Integer который передается на методу Float.intBitsToFloat:
|
| Автор: COVD 26.3.2008, 17:18 | ||
| Категорически нельзя использовать available() для оценки количества данных. Данные из внешнего источника (база данных, удаленный сервер) могут загружаться частями. Соответственно, available() будет возвращать от 0 (вначале загрузки данных в стрим) до МАХ. Не нужна проверка while(dis.available()>0) , потому что readByte - блокирующая операция (в документации явно не написано, но для чтения используется InputStream.read() - там написано, что блокирующая). Надо while(true) и выход из цикла по EOFException (нормальное завершение чтения) или IOException. Метод readFloat делает тоже самое, что код автора топика (кроме конечно skipBytes(4) - это вообще зачем пропускать следующие 4 байта ? ):
какой смысл повторять readFloat, да еще с учетом skipBytes возможно неправильно? Поскольку размер данных не известен, то заранее создавать массив data[] не получится - надо использовать динамическую коллекцию ( ArrayList<Float> например ). |
| Автор: TieRR 26.3.2008, 17:31 |
| как я могу применять readdouble, когда там идет двоичный поток длиной в тысячи байт??? |
| Автор: alexadr 26.3.2008, 17:34 |
| Ну так метод надо дергать в цикле readDouble(). |
| Автор: TieRR 27.3.2008, 16:46 |
| Всем спасибо, все заработало) |