当前位置: 首页 > 面试题库 >

C#的HttpServerUtility.UrlTokenDecode是否有Java等效项?

宋英杰
2023-03-14
问题内容

如何在Java中解码使用HttpServerUtility.UrlTokenEncode在C#中编码的字符串?


问题答案:

我尝试使用org.apache.commons.codec.binary.Base64(ctor接受一个参数,说明编码/解码是否是url安全的),但事实证明它的实现方式与UrlTokenEncode
/ Decode不同。

我最终将C#实现迁移到Java:

 public static byte[] UrlTokenDecode(String input) { 
    if (input == null)
        return new byte[0];

    int len = input.length(); 
    if (len < 1)
        return new byte[0];

    ///////////////////////////////////////////////////////////////////
    // Step 1: Calculate the number of padding chars to append to this string. 
    //         The number of padding chars to append is stored in the last char of the string.
    int numPadChars = (int)input.charAt(len - 1) - (int)'0';
        if (numPadChars < 0 || numPadChars > 10)
            return null;


    /////////////////////////////////////////////////////////////////// 
    // Step 2: Create array to store the chars (not including the last char)
    //          and the padding chars 
    char[] base64Chars = new char[len - 1 + numPadChars];


    //////////////////////////////////////////////////////// 
    // Step 3: Copy in the chars. Transform the "-" to "+", and "*" to "/"
    for (int iter = 0; iter < len - 1; iter++) { 
        char c = input.charAt(iter);

        switch (c) { 
            case '-':
                base64Chars[iter] = '+';
                    break;

                case '_':
                base64Chars[iter] = '/'; 
                break;

            default: 
                base64Chars[iter] = c;
                break;
        }
    }

    //////////////////////////////////////////////////////// 
    // Step 4: Add padding chars 
    for (int iter = len - 1; iter < base64Chars.length; iter++) {
        base64Chars[iter] = '='; 
    }

    // Do the actual conversion
    String assembledString = String.copyValueOf(base64Chars);
    return Base64.decodeBase64(assembledString);
}


 类似资料:
  • 问题内容: 我知道我们可以使用Java中的方法通过指定其位置来获取字符串中的单个字符。C#中有等效的方法吗? 问题答案: 您可以像数组一样索引C#中的字符串,然后在该索引处获取字符。 例: 在Java中,您会说 在C#中,您会说

  • 本文向大家介绍C#是否等效于Java的Thread.setDaemon?,包括了C#是否等效于Java的Thread.setDaemon?的使用技巧和注意事项,需要的朋友参考一下 与Java的Thread.setDaemon等效的C#是前台线程和后台线程的概念。 当前台线程关闭时,后台线程将终止。前台线程继续运行,直到最后一个前台线程终止。 用于后台线程的属性是IsBackground,该属性获取

  • 问题内容: 有许多问题询问LINQ是否有Java等效项。但是他们中的大多数人错误地指出没有任何东西。 问题答案: 该库提供了完整的LINQ API:https : //github.com/nicholas22/jpropel-light 它使用功能样式的构造来做到这一点,并且还使用延迟执行。

  • 问题内容: 是否有与C ++等效的Java Map keySet()? Java 方法返回“此映射中包含的键的设置视图”。 问题答案: 也许以下可能有用: 使用STL兼容序列(例如std :: vector,std :: deque或std :: list)的 make_key_set 函数的重载可以如下所示:

  • 问题内容: 我知道Java本身没有直接的等效项,但也许是第三方? 真的很方便。当前,我想实现一个迭代器,该迭代器生成树中的所有节点,这大约是带有yield的五行代码。 问题答案: 我知道的两个选项是2007年的Aviad Ben Dov的infomancers- collections库 和2008年的Jim Jimler的YieldAdapter库 (在另一个答案中也提到了)。 两者都允许您使用

  • 问题内容: Java具有格式字符串的概念,与其他语言的格式字符串非常相似。它用于诸如输出转换之类的JDK方法中。 我想知道在Java中是否有类似于C的输入转换方法? 问题答案: 看一下该站点,它解释了两种使用java中的控制台读取的方法,使用或使用System.in中的经典方法。 以下代码摘自引用的网站: - 问候。