美文网首页
关于io读取缓存会有中文部分乱码的问题

关于io读取缓存会有中文部分乱码的问题

作者: 鲁克巴克诗 | 来源:发表于2016-10-13 18:09 被阅读69次

    今天老板突然说,要给用户友评做个缓存,不至于一上来就请求数据库。
    可是当断网的时候,缓存读取出现了中文乱码。不是一下子都是乱的,而是个别字是乱码。
    后来网上看到用BufferedReader这个类可以不乱码,我就试了试。没想到还真不错,成功了!

    public String getAsStringNew( String key )
    {
        BufferedReader  buf     = null;
        StringBuffer    stringBuffer    = new StringBuffer();
        try {
            String line = null;
            buf = new BufferedReader( new InputStreamReader( get( key ) ) );
            while ( (line = buf.readLine() ) != null )
            {
                stringBuffer.append( line );
            }
        } catch ( IOException e ) {
            e.printStackTrace();
        } finally {
            try {
                buf.close();
            } catch ( IOException e ) {
                e.printStackTrace();
            }
        }
    
        return(stringBuffer.toString() );
    }
    

    还有一个方法就是使用解码。在缓存的时候转码,读取缓存的时候解码。

    缓存时:

        public void put(String key, String value) {
            try {
                value = URLEncoder.encode(value, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            DiskLruCache.Editor edit = null;
            BufferedWriter bw = null;
            try {
                edit = editor(key);
                if (edit == null) return;
                OutputStream os = edit.newOutputStream(0);
                bw = new BufferedWriter(new OutputStreamWriter(os));
                bw.write(value);
                edit.commit();//write CLEAN
            } catch (IOException e) {
                e.printStackTrace();
                try {
                    //s
                    edit.abort();//write REMOVE
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            } finally {
                try {
                    if (bw != null)
                        bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    读取缓存时:

     public String getAsString(String key) {
            InputStream inputStream = null;
            try {
                //write READ
                inputStream = get(key);
                if (inputStream == null) return null;
                StringBuilder sb = new StringBuilder();
                int len = 0;
                byte[] buf = new byte[128];
                while ((len = inputStream.read(buf)) != -1) {
                    sb.append(new String(buf, 0, len));
                }
                return URLDecoder.decode(sb.toString(), "UTF-8");
            } catch (Exception e) {
                e.printStackTrace();
                if (inputStream != null)
                    try {
                        inputStream.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
            }
            return null;
        }
    

    相关文章

      网友评论

          本文标题:关于io读取缓存会有中文部分乱码的问题

          本文链接:https://www.haomeiwen.com/subject/vdawyttx.html