java中字符流和字节流的转换
ringa_lee
ringa_lee 2017-04-17 17:37:42
0
3
973

看到InputStreamReader和OutputStreamWriter的一些说法,
说InputStreamReader是将字节流转换成字符流,而OutputStreamWriter则相反,是将字符流转换成字节流;
但是
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("xxxx")));
这句代码中,明显OutputStreamWriter接收的是一个字节流,而返回的则是个字符流,
所以上面的说法应该是错误的吧?

ringa_lee
ringa_lee

ringa_lee

répondre à tous(3)
刘奇

Euh... ceci...
Le paramètre d'entrée de la méthode constructeur de OutputStreamWriter est un flux d'octets OutputStream, ce qui signifie convertir le OutputStream en OutputStreamWriter. De ce point de vue, il s'agit de "convertir le flux d'octets en. un flux de caractères" .
Lorsque OutputStreamWriter écrit, vous transmettez des caractères, mais à la fin, IO écrit un flux d'octets. De ce point de vue, il s'agit de "convertir le flux de caractères en flux d'octets".
Donc les deux affirmations sont correctes.

"Convertir le flux d'octets en flux de caractères" fait référence à la conversion de l'API, "Convertir le flux de caractères en flux d'octets" fait référence à la conversion des données pendant l'écriture.

En fait, il vous suffit de savoir que l'ordinateur lui-même ne prend en charge que les octets binaires tels que 01010101, et que les caractères ou les chaînes sont obtenus par codage d'octets. OutputStreamWriter n'est qu'une opération de codage de plus.

巴扎黑

Ce qui construit OutputStreamWriter est un FileOutputStream. Ce flux est en fait encapsulé dans un écrivain. Toutes les opérations d'écriture sur l'écrivain seront finalement écrites dans le flux. Mais lors de l'écriture sur l'écrivain, ce qui est écrit est une chaîne, et l'écrivain convertira la chaîne entrante en un flux de caractères et l'écrira dans un flux... Alors...

PHPzhong
    /**
     * String字符串转换成InputStream流
     * @param str String字符串
     * @param encoding 编码格式
     * @return InputStream流
     */
    public static InputStream string2InputStream(String str, String encoding) {
        ByteArrayInputStream result = null;
        try {
            if(str != null){
                result = new ByteArrayInputStream(str.getBytes(encoding));
            }
        } catch (Exception e) {
            result = null;
        }
        return result;
    }
    /**
     * InputStream流转换成String字符串
     * @param inStream InputStream流
     * @param encoding 编码格式
     * @return String字符串
     */
    public static String inputStream2String(InputStream inStream, String encoding){
        String result = null;
        try {
            if(inStream != null){
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                byte[] tempBytes = new byte[_buffer_size];
                int count = -1;
                while((count = inStream.read(tempBytes, 0, _buffer_size)) != -1){
                    outStream.write(tempBytes, 0, count);
                }
                tempBytes = null;
                outStream.flush();
                result = new String(outStream.toByteArray(), encoding);
            }
        } catch (Exception e) {
            result = null;
        }
        return result;
    }
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal