Я использовал 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 , то есть
1) Сокращаться настолько, насколько это возможно : например, 2001: db8: 0: 0: 0: 0: 2: 1 должно быть сокращено до
2001: db8 :: 2: 1. Аналогично, 2001: db8 :: 0: 1 недопустимо, поскольку символ "::msgstr "можно было бы использовать для создания более короткого представления 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 для этого?Может ли кто-нибудь помочь мне?
Заранее спасибо.