Указатель на буфер, альтернатива на java

207
04 декабря 2018, 15:30

Вот например на си и с++ я передаю буфер, этот буфер строился из структуры. И вот например я получаю этот буфер по сети, накладываю указатель на структуру и получаю данные структуры.

struct i {
  int i;
  char s;
};
struct i *i = &buf[0];
printf ( "%d\n", i->i );

Какая есть алтернатива в java? Я немного посмотрел в книге и нашел что можно сеарилизовать объект, но нашел только в файл. В документации не нашел информации о функции наподобии этой putObject(), которая могла бы сеарилизовать в буфер для передачи по сети. Да и ещё где-то читал, что сериализацию хотят или убрали уже в новых версиях java. Вообще не пойму как можно обработать данные по сети в java, это же какой-то кошмар, если нет указателей. С указателями я мог бы делать так.

struct number {
  int n;
};
struct ver {
  int n;
  int v;
};
struct her {
  int n;
  short v;
};
struct number *n = &buf[0];
switch ( n->n ) {
  case 0:
    struct ver *v = &buf[0];
    printf ( "%d\n", v->v );
    break;
  case 1:
    struct her *h = &buf[0];
    printf ( "%d\n", h->v );
    break;
}

}

Answer 1

Возможные варианты решения:

  1. Объявить два метода Serialize/Deserialize и вручную все сделать для каждого поля
  2. Написать универсальный сериализатор/десериализатор и обработать все поля через рефлексию
  3. Воспользоваться одной из библиотек для сериализации/десериализации. Например gson
  4. Воспользоваться одной из библиотек для передачи объектов по сети. Например apache thrift
READ ALSO
Кодировки в Java

Кодировки в Java

Есть блок кода, который считывает строку из файла и строка будет на русском языке, но соответственно в терминале вместо русских буквы - вопросительные...

214
Правильный выбор коллекции

Правильный выбор коллекции

Подскажите лучшую коллекцию в плане производительности в ситуации, когда нужно очень часто её создавать и пополнятьПри этом порядок добавления...

186
JavaFX как убрать выделение в ListView

JavaFX как убрать выделение в ListView

Мне нужно убирать выделение, если пользователь нажал на строку ListView, которая пустаИз-за того что выделение не сбрасывается - нельзя понять...

348
планировщик задач

планировщик задач

собственно задача: нужно один раз в указанное время (исходя из текущей времени рассчитывается) выполнять метод

240