Endereço IPV6 em formato compactado em Java

Eu tenho usadoInet6Address.getByName("2001:db8:0:0:0:0:2:1").toString() para compactar o endereço IPv6 e a saída é2001:db8:0:0:0:0:2:1 ,mas eu preciso2001:db8::2:1. , Basicamente, a saída de compactação deve se basear emRFC 5952 standard , isso

1)Shorten o máximo possível: Por exemplo, 2001: db8: 0: 0: 0: 0: 2: 1 deve ser reduzido para
2001: db8 :: 2: 1. Da mesma forma, 2001: db8 :: 0: 1 não é aceitável, porque o símbolo "::" poderia ter sido usado para produzir uma representação mais curta 2001: db8 :: 1.

2)Manuseio de um campo 0 de 16 bits: O símbolo "::" NÃO DEVE ser usado para reduzir apenas um campo 0 de 16 bits. Por exemplo, a representação 2001: db8: 0: 1: 1: 1: 1: 1 está correta, mas 2001: db8 :: 1: 1: 1: 1: 1 não está correta.

3) Escolha na veiculação de "::" : = Quando houver uma opção alternativa no posicionamento de um "::", a execução mais longa de campos 0 de 16 bits consecutivos DEVE ser reduzida (ou seja, a sequência com três campos zero consecutivos será reduzida em 2001: 0: 0: 1: 0: 0: 0: 1). Quando o comprimento dos campos consecutivos de 16 bits 0 é igual (ou seja, 2001: db8: 0: 0: 1: 0: 0: 1), a primeira sequência de zero bits DEVE ser reduzida. Por exemplo, 2001: db8 :: 1: 0: 0: 1 é a representação correta.

Também verifiquei outro post no estouro de pilha, mas não havia nenhuma condição especificada (exemplo de escolha no posicionamento de ::).

Existe alguma biblioteca java para lidar com isso? Alguém poderia me ajudar?

Desde já, obrigado

questionAnswers(6)

yourAnswerToTheQuestion