Я использовал метод Inet6Address.getByName("2001:db8:0:0:0:0:2:1").toString()
для сжатия IPv6-адреса, а выход - 2001:db8:0:0:0:0:2:1
, но мне нужно 2001:db8::2:1
., В основном выход сжатия должен основываться на RFC 5952 standard, то есть
1) Сократить как можно больше: Например, 2001: db8: 0: 0: 0: 0: 2: 1 необходимо сократить до 2001: db8:: 2: 1. Аналогично, 2001: db8:: 0: 1 неприемлем, потому что символ "::" мог быть использован для создания краткое представление 2001: db8:: 1.
2) Обработка одного поля с 16 битами 0: символ "::" НЕ ДОЛЖЕН использоваться для сокращения всего одного 16-битного поля 0. Например, представление 2001: db8: 0: 1:1: 1:1: 1 является правильным, но 2001: db8:: 1:1: 1:1: 1 неверно.
3) Выбор места размещения "::" := Когда есть альтернативный выбор в размещение "::", длительный запуск последовательных 16-битных полей 0 ДОЛЖЕН быть сокращен (т.е. последовательность с тремя последовательными нулевыми полями сокращается в 2001 году: 0: 0: 1: 0: 0: 0: 1). Когда длина последовательных 16-битных полей 0 равны (т.е. 2001: db8: 0: 0: 1: 0: 0: 1), первая последовательность нуля бит ДОЛЖНЫ быть сокращены. Например, 2001: db8:: 1: 0: 0: 1 правильно представление.
Я также проверил еще одно сообщение в переполнении стека, но не было указанного условия (пример выбора при размещении::).
Есть ли какая-нибудь java-библиотека для обработки этого? Может ли кто-нибудь помочь мне?
Спасибо заранее.