`
gingguoqiu
  • 浏览: 25536 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

BASE64Decoder/ BASE64Encoder非线程安全非线程安全

 
阅读更多

 

package com.hoo.client;

import sun.misc.BASE64Encoder;

public class Test {

  public static void main(String[] args) {
    BASE64Encoder encoder = new sun.misc.BASE64Encoder();

    String str = "中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国";

    String right = encoder.encode(str.getBytes());
    System.out.println("right=" + right);
    Thread thread1 = new Thread(new Thread1(encoder, str, right));
    thread1.start();
    Thread thread2 = new Thread(new Thread2(encoder, str, right));
    thread2.start();
  }

}

class Thread1 implements Runnable {
  private BASE64Encoder encoder;
  private String str;
  private String right;

  public Thread1(BASE64Encoder encoder, String str, String right) {
    this.encoder = encoder;
    this.str = str;
    this.right = right;
  }

  public void run() {
    for (;;) {// 一直循环到出问题为止吧。
      String str1 = encoder.encode(str.getBytes());
      if (!right.equals(str1)) {
        System.err.println("wrong=" + str1);
        System.exit(0);
      }
    }
  }
}

class Thread2 implements Runnable {
  private BASE64Encoder encoder;
  private String str;
  private String right;

  public Thread2(BASE64Encoder encoder, String str, String right) {
    this.encoder = encoder;
    this.str = str;
    this.right = right;
  }

  public void run() {
    for (;;) {
      String str1 = encoder.encode(str.getBytes());
      if (!right.equals(str1)) {
        System.err.println("wrong=" + str1);
        System.exit(0);
      }
    }
  }
}

 

modify 2014-04-29

调整输出:

import java.io.IOException;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Test {

  public static void main(String[] args) {
    BASE64Encoder encoder = new sun.misc.BASE64Encoder();

    String str = "中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国";

    String right = encoder.encode(str.getBytes());
    System.out.println("right=" + right);
    Thread thread1 = new Thread(new Thread1(encoder, str));
    thread1.start();
    Thread thread2 = new Thread(new Thread2(encoder, str));
    thread2.start();
  }
}

class Thread1 implements Runnable {
  private BASE64Encoder encoder;
  private String str;

  public Thread1(BASE64Encoder encoder, String str_old) {
    this.encoder = encoder;
    this.str = str_old;
  }

  public void run() {
    for (;;) {// 一直循环到出问题为止吧。
      String str1 = encoder.encodeBuffer(str.getBytes());
      
      String s_new = "";
      BASE64Decoder decode = new BASE64Decoder();
      byte[] b;
      try {
        b = decode.decodeBuffer(str1);
        s_new = new String(b);
      } catch (IOException e) {
        e.printStackTrace();
      }
      
      if (!str.equals(s_new)) {
        System.err.println("wrong=" + s_new);
        System.exit(0);
      }
    }
  }
}

class Thread2 implements Runnable {
  private BASE64Encoder encoder;
  private String str;

  public Thread2(BASE64Encoder encoder, String str) {
    this.encoder = encoder;
    this.str = str;
  }

  public void run() {
    for (;;) {
      String str1 = encoder.encodeBuffer(str.getBytes());
      
      String s_new = "";
      BASE64Decoder decode = new BASE64Decoder();
      byte[] b;
      try {
        b = decode.decodeBuffer(str1);
        s_new = new String(b);
      } catch (IOException e) {
        e.printStackTrace();
      }
      
      if (!str.equals(s_new)) {
        System.err.println("wrong=" + s_new);
        System.exit(0);
      }
    }
  }
}

 

 

分享到:
评论
3 楼 gingguoqiu 2014-04-29  
lwclover 写道
仔细看了一下,哥们你说完全不对。
结果是这样的:right=5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx
5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq6
5rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit
5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM
5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR
5YWx5ZKM5Zu9
wrong=5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9


wrong=5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx
5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq6
5rCR5YWx5ZKM5Zu95Lit5Y2O5Lq6

5rCR5YWx
5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit
5Y2O5
Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM

5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR
5YWx5ZKM5Zu9

wrong和right是一样的,就是控制台打出来的格式不一样

已调整输出,解码后,和原字符串可看出不一致
2 楼 lwclover 2014-03-17  
仔细看了一下,哥们你说完全不对。
结果是这样的:right=5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx
5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq6
5rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit
5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM
5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR
5YWx5ZKM5Zu9
wrong=5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9


wrong=5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx
5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq6
5rCR5YWx5ZKM5Zu95Lit5Y2O5Lq6

5rCR5YWx
5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit
5Y2O5
Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM

5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95Lit5Y2O5Lq65rCR
5YWx5ZKM5Zu9

wrong和right是一样的,就是控制台打出来的格式不一样
1 楼 lwclover 2014-03-17  
你实现一个Runnable就行了,还有就是你的结论证据不足encode这个方法有时会有问题,但是encodeBuffer这个方法确没有问题。

相关推荐

    BASE64Encoder.jar

    虽然`sun.misc`包的`BASE64Encoder`和`BASE64Decoder`曾经是常见的选择,但为了代码的稳定性和安全性,现代开发应当转向使用Java标准库中的`java.util.Base64`。`BASE64Encoder.jar`这样的第三方库则提供了另一种...

    java-Base64编码

    1. **`sun.misc.BASE64Decoder` 和 `sun.misc.BASE64Encoder`**: 这是Java早期版本中提供的Base64编码解码器,位于非公开的`sun.misc`包中。这两个类分别用于Base64解码和编码,但因为它们不是Java标准API的一部分,...

    Base64批量加密工具

    1. **Base64Encoder和Base64Decoder**:这两个是`java.util.Base64`类库中的核心接口,分别用于编码和解码。使用`getEncoder()`和`getDecoder()`静态方法可以获取对应的实例。 2. **编码过程**:对于一个字节数组,...

    BASE64来自commons-codec-1.10

    `Decoder.java`和`Encoder.java`是抽象基类,定义了解码器和编码器的基本接口,包括核心的编码和解码方法,子类如Base64Decoder和Base64Encoder继承并实现了这些方法。 综上所述,Apache Commons Codec 1.10提供的...

    Java实现图片和Base64之间的相互转化

    1. **解码Base64**:使用`Base64.Decoder`类的`decode()`方法对Base64编码的字符串进行解码,得到字节数组。 2. **创建图像流**:使用`javax.imageio.ImageIO`类的`createImageInputStream()`方法创建一个图像输入流...

    Delphi base64单元

    3. **类接口**:有时,Base64处理会被封装到一个类中,比如TBase64Encoder和TBase64Decoder,提供更高级别的接口,可能包括流处理和错误处理能力。 4. **内存管理**:编码和解码过程可能会涉及到内存的分配和释放,...

    base64编码与解码jar包

    在Java中,`sun.misc.BASE64Decoder`和`sun.misc.BASE64Encoder`是早期用于Base64编码和解码的类,它们位于非公开的`sun.misc`包中。虽然这些类在某些版本的JDK中可用,但它们并不是标准API的一部分,因此不推荐在...

    javaBase64

    2. `Base64.Encoder` 和 `Base64.Decoder`: 这两个接口提供了更灵活的编码和解码选项,例如自定义线程安全的实例,控制是否添加行分隔符等。 - `Encoder.encodeToBytes(ByteBuffer)`: 编码ByteBuffer中的数据为字节...

    javabase64-1.3.1__包 和使用实例.rar

    例如,你可以创建一个`Base64.Encoder`对象来编码二进制数据,创建一个`Base64.Decoder`对象来解码Base64字符串。这里是一个简单的使用示例: ```java import java.util.Base64; public class Base64Example { ...

    Base64Img.rar

    例如,可以使用多线程处理,或者预先计算并缓存Base64编码结果,减少重复计算。 7. **错误处理**:在实际开发中,需要考虑文件不存在、编码/解码过程中出现的错误等情况,并添加相应的异常处理机制。 以上就是在...

    Java核心技术介绍-java核心技术讲解word格式可编辑.docx

    private static BASE64Decoder dec = new BASE64Decoder(); // 将String转换成byte[] // DES加密解密逻辑... } ``` #### 七、Java正则表达式 Java的正则表达式提供了一种强大的文本匹配工具。其中,数量限定符...

    java实现复杂的AES算法 源码

    解码时,使用`Base64.Decoder`进行反向操作。 5. 安全考虑: - 避免明文存储密钥,可使用密钥派生函数(如PBKDF2)将用户提供的密码转换为密钥。 - AES的ECB模式不安全,因为它不隐藏数据的模式,建议使用CBC模式...

    C语言发邮件原理以及实现以及代码

    可以使用在线工具进行base64编码,如http://www.motobit.com/util/base64-decoder-encoder.asp。 验证通过后,开始发送邮件的具体信息。"MAIL FROM:"命令指定发件人,"RCPT TO:"命令指定收件人,可以发送多个"RCPT ...

    java webservice上传下载文件代码分享

    - 使用sun.misc.BASE64Decoder和BASE64Encoder需要注意,这两个类在Java 9及以后版本中已废弃,应使用Java标准库的`java.util.Base64`进行Base64编码和解码操作。 - 服务器端的文件路径应根据实际环境配置,避免硬...

    POCO 样例说明,PDF格式

    - **2.1.3 Base64Decode 和 Base64Encode Samples**:这两个样例分别展示了如何使用 `Base64Decoder` 和 `Base64Encoder` 类来进行数据的 Base64 编码与解码操作。 - **2.1.4 BinaryReaderWriterSample**:本示例...

    FFmpeg_3_2_4_SDL_2_0_5例子代码2

    7. **解码器和编码器**:FFmpeg的`avcodec_find_decoder()`和`avcodec_find_encoder()`函数分别用于查找合适的解码器和编码器。`avcodec_decode_video2()`或`avcodec_decode_audio4()`用于解码数据,`avcodec_encode...

    ts-core-socket:套接字的类和实用程序

    6. **多线程/进程支持**:在高并发场景下,为了提高性能,可能需要在多个线程或进程中并行处理套接字通信。库可能提供并发处理的支持,比如通过Node.js的`worker_threads`模块。 7. **实用工具**:库还可能包含一些...

Global site tag (gtag.js) - Google Analytics