Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 校验和不';当计算字符串包含重音字符时不匹配_Java_Checksum - Fatal编程技术网

Java 校验和不';当计算字符串包含重音字符时不匹配

Java 校验和不';当计算字符串包含重音字符时不匹配,java,checksum,Java,Checksum,第一:我有一个包含重音字符的字符串 第二:我计算它的校验和 private static String checkSumInStream(String Str, String checksumAlgorithm) throws Exception { InputStream stream = new ByteArrayInputStream(Str.getBytes()); MessageDigest digest = MessageDigest.getI

第一:我有一个包含重音字符的字符串

第二:我计算它的校验和

 private static String checkSumInStream(String Str, String checksumAlgorithm) throws Exception
{           
    InputStream stream = new ByteArrayInputStream(Str.getBytes());
    MessageDigest digest = MessageDigest.getInstance(checksumAlgorithm);

    InputStream input = null;
    StringBuffer sb = new StringBuffer();
    try{
        input = stream;
        byte[] buffer = new byte[8192];
        do {
            int read = input.read(buffer);
            if(read <= 0)
                break;
            digest.update(buffer, 0, read);
        } while(true);
        byte[] sum = digest.digest();

        for (int i = 0; i < sum.length; i++) {
            sb.append(Integer.toString((sum[i] & 0xff) + 0x100, 16).substring(1));
        }

    }catch(IOException io)
    {

    }finally{
        if(input != null)
            input.close();
    }

    return sb.toString();
}
private static String checkSumInStream(String Str,String checksum算法)引发异常
{           
InputStream=新的ByteArrayInputStream(Str.getBytes());
MessageDigest=MessageDigest.getInstance(checksumAlgorithm);
InputStream输入=null;
StringBuffer sb=新的StringBuffer();
试一试{
输入=流;
字节[]缓冲区=新字节[8192];
做{
int read=输入.读取(缓冲区);

if(read如何将字符串写入文件?必须非常小心,以与从文件中读回字符串相同的方式执行此操作

就你而言:

OutputStream out = new FileOutputStream(myfile);
out.write(str.getBytes());
out.close();
然后它应该可以工作。但是您需要记住,当您写入文件时,
str.getBytes()
不是一种安全的方法,因为它使用平台默认的字符编码。如果您将这样的文件发送到其他地方并在那里使用,您可能会用错误的编码将其读回

您的平台默认编码甚至可能不支持重音字符!(但是如果您以完全相同的方式写入和读取文件,那么您应该得到完全相同的结果,因此这不会是问题的原因)

最好使用
UTF-8
字符编码。
无论您在哪里使用
str.getBytes()
,如果您想避免捕获
不支持的编码异常
,请将其替换为
str.getBytes(“UTF-8”)
,或者
str.getBytes(Charset.forName(“UTF-8”)
[即使每个Java实现都需要支持UTF-8编码。这很烦人…]

假设您指的是IO流,而不是Java 8流,它们不包含字符,而是包含字节。另外,请发布您的代码。“我创建了一个流”:如何?我计算它的校验和:如何?代码
OutputStream out = new FileOutputStream(myfile);
out.write(str.getBytes());
out.close();