All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertx.redis.impl.RedisEncoding Maven / Gradle / Ivy

There is a newer version: 5.0.0.CR3
Show newest version
/**
 * Copyright 2015 Red Hat, Inc.
 * 

* All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. *

* The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html *

* The Apache License v2.0 is available at * http://www.opensource.org/licenses/apache2.0.php *

* You may elect to redistribute this code under either of these licenses. */ package io.vertx.redis.impl; /** * This is how Redis escapes char codes: * * DEC HEX REDIS * 07 07 \a * 08 08 \b * 09 09 \t * 10 0a \n * 13 0d \r * * Otherwise: * 00-32 00-20 \xXX * 32-127 20-7f ASCII char * 127-256 7f-ff \xXX * * @author Marko Strukelj */ @Deprecated public class RedisEncoding { private static final char[] NUMERALS = "0123456789abcdef".toCharArray(); /** * Encode characters in input string using \\xXX syntax. * Only lower byte of every character is used when encoding. * * @param value Input string with characters between 0 and 255 * @return Encoded string that can be pasted into redis-cli shell */ public static String encode(String value) { StringBuilder sb = new StringBuilder(); int len = value.length(); for (int i = 0; i < len; i++) { char c = value.charAt(i); int lo = 0xFF & c; if (lo >= 32 && lo < 127) { sb.append((char) lo); continue; } switch (lo) { case 7: sb.append("\\a"); continue; case 8: sb.append("\\b"); continue; case 9: sb.append("\\t"); continue; case 10: sb.append("\\n"); continue; case 13: sb.append("\\r"); continue; } int ma = lo / 16; int mi = lo % 16; sb.append("\\x").append(NUMERALS[ma]).append(NUMERALS[mi]); } return sb.toString(); } /** * Decode characters in input string from \\xXX syntax. * Result can be passed to setBinary(), and restore() * * @param value Input string with characters between 0 and 255 * @return Encoded string that can be pasted into redis-cli shell */ public static String decode(String value) { StringBuilder sb = new StringBuilder(); int len = value.length(); int decoding = -1; int d = 0; for (int i = 0; i < len; i++) { char c = value.charAt(i); if (decoding > -1) { int df = i - decoding; if (df == 1) { if (c == 'x') { continue; } switch (c) { case 'a': sb.append('\u0007'); break; case 'b': sb.append('\u0008'); break; case 't': sb.append('\u0009'); break; case 'n': sb.append('\n'); break; case 'r': sb.append('\r'); break; case '\\': sb.append('\\'); break; default: throw new RuntimeException("Invalid escape sequence: \\" + c + " at pos " + i); } decoding = -1; d = 0; continue; } int val = c >= 48 && c < 58 ? (c - 48) : c >= 65 && c < 71 ? (10 + c - 65) : c >= 97 && c < 103 ? (10 + c - 97) : -1; if (val == -1) { throw new RuntimeException("Invalid escape sequence: " + value.substring(decoding, i + 1) + " at pos: " + i); } d += df == 2 ? 16 * val : val; if (df == 3) { sb.append((char) d); decoding = -1; d = 0; } } else if (c == '\\') { decoding = i; } else { sb.append(c); } } return sb.toString(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy