Задать вопрос
Ответы пользователя по тегу Java
  • Есть ли аналог CLR via C# Рихтера в мире Java?

    @AlexHell
    Ответ написан
    Комментировать
  • Проверить пересекаются ли отрезки, что я делаю не так?

    @AlexHell
    В википедии есть формула и пояснения https://en.wikipedia.org/wiki/Intersection_(Euclid...

    а по вашему коду точно не разбирал

    вкратце как надо:
    * создаются уравнения прямых через 2 точки
    * проверяются пересечения двух уравнений прямых - есть ли точка пересечения (может не быть)
    * проверяется принадлежность точки пересечения каждому отрезку (или явно или лучше параметрически) (может быть в уравнении но не в диапазоне отрезка)

    однако так делать нельзя изза погрешности double if (y2 == y1) k1 = 0; обычно проверяют через if(Abs(y2 - y1) < epsilon) (скажем 0.0001 но зависит от задач)
    Ответ написан
    Комментировать
  • Как привести blob (>32k) к строке?

    @AlexHell
    без ORM - чисто JDBC
    https://www.ibm.com/support/knowledgecenter/ssw_ib...
    byte[] outByteArray = blob1.getBytes(startingPoint, (int)endingPoint);
    потом конкретируете в string с нужной кодировкой
    Ответ написан
    Комментировать
  • Java+netty+kafka: как перейти от многопоточности к мультиплексированию?

    @AlexHell
    Я прочитал ответ от Сергей Горностаев в принципе согласен со 2м вариантом, если я его понял, но дополню как бы сделал я:
    - кто-то отправляет сообщение к netty серверу "write"
    - netty делает добавление в InMemory очередь для kafka (мгновенно)
    - netty оповещает остальным заинтересованным (если клиент уже приконекчен, иначе он получит все пакеты в момент конекта) TCP пакет "notify" (мгновенно) чтобы потом клиент послал "readAll" если данные сразу слать не хочется, либо сразу пакет со всеми данными ему шлется предназначенными ему
    - (если клиент еще не был приконекчен) заинтересованный клиент конектится и netty отдает ему все его сообщения (не комитит пока) из InMemory
    - клиент шлет "commit" - netty фиксирует в InMemory до какого сообщения клиент дочитал, и отправляет в очередь также в kafka

    по сути получается одна лишняя очередь, куда сохраняются KafkaTask
    и еще текущее состояние InMemory (видимо с удалением когда клиент уж точно прочитал)

    в этой очереди из InMemory в отдельном потоке или даже пуле, как и при БД - происходит запись в kafka реально для персистентности
    я правильно понял цели?

    если бы не персистентность то можно было бы без kafka обойтись даже и просто клиент шлет "write" и всем остальным клиентам рассылается "data" если они уже онлайн или складывается в InMemory и только в момент приконекта клиента отдается

    когда персистентность нужна - добавляется только лишняя очередь чтоб в нее в итоге сохранялось, остальное все то же, и при перезапуске сервака - данные из kafka (или БД) бы восстанавливались в InMemory (если их не прям очень много, иначе может отложенным таском в потоке другом)
    Ответ написан
    Комментировать
  • Как правильно реализовать клиент-серверную структуру в данном случае?

    @AlexHell
    Помоему более-менее еще написано, не совсем говнокод, можно улучшить
    если 2 контроллера - и это у вас разные Окна / Формы, то никакий из нихз не надо насоледовать от TCPConnection и TCPConnectionListener, надо сделать гдето Singleton
    public static MyConnectionToServer
    {
      private static readonly TCPConnection Connection
        = new .. (OnMessageReceived);
      private static readonly Dictionary<string, List<Action<MessageBase>>> Listeners = new ..;
    
      public static void SendToServer<T>(RequestBase request) { /* send */ }
    
      private static void OnMessageReceived(string message)
      {
      // все сообщения наследовать например от MessageBase
      // но в подклассах еще новые данные
      // в MessageBase только string MessageType
    
      // это десериализует только тип по сути, остальное игнорит
      MessageBase messageBase = Deserialize<MessageBase>(message); 
    
      MessageBase concreteMessage = DeserializeConcrete(messageBase.MessageType, message);
      Dispatch(messageBase.MessageType, concreteMessage);
    }
    
      private static T DeserializeConcrete<T>(string messageType, string message)
      {
        switch (messageType)
        {
          case "type1": return Deserialize<MessageType1>(message);
          case "type2": return Deserialize<MessageType2>(message);
        }
      }
    
      private static void Dispatch(string messageType, T concreteMessage) where T: MessageBase
      {
      // юзать Listeners по messageType и в них передать concreteMessage
      }
    
      public static void AddListener<T>(string messageType, Action<T> onReceived)
      {
        // добавить в Dictionary по messageType
      }
    
      public static void RemoveListener<T>(string messageType, Action<T> onReceived)
      {
        // удалить из Dictionary по messageType
      }
    }
    
    а из каждого Контроллера Окна вызывать
    AddListener("type1", (message) => ProcessType1(message));
    
    и в конце RemoveListener("type1") чтобы не утекло
    Ответ написан
    Комментировать
  • Как передать данные из java-класса в нативный блок кода, написанного на C++?

    @AlexHell
    Я не подскажу с тем подходом, который вы использовали.
    Пробовал только такой тулзой https://github.com/nativelibs4java/JNAerator сгенерировал к уже существующему DLL (от стима) класс Java, в котором получилось вида
    public interface LibrarySteamAppTicket extends Library {
    byte SteamEncryptedAppTicket_BDecryptTicket(uint8 rgubTicketEncrypted, int cubTicketEncrypted, uint8 rgubTicketDecrypted, IntByReference pcubTicketDecrypted, Pointer rgubKey, int cubKey);
    ...
    }

    и вызывал так
    private static LibrarySteamAppTicket Library = (LibrarySteamAppTicket) Native.loadLibrary("sdkencryptedappticket64" , LibrarySteamAppTicket.class);
    // причем sdkencryptedappticket64.dll лежит рядом с jar при релизе (или в netBeans проекте в корне)

    ...
    byte ret = Library.SteamEncryptedAppTicket_BDecryptTicket(..)

    Причем DLL создана была явно не для java, а произвольную можно.
    Ответ написан
    Комментировать