在实际开发中经常会碰到乱码问题:

首先查看系统支持的编码方式,默认的编码方式

//检查java支持的编码

System.out.println(Charset.availableCharsets().toString());//检查系统默认的编码方式

System.out.println(Charset.defaultCharset());//检查某种编码方式系统是否支持

System.out.println(Charset.isSupported("GBK"));

根据打印的结果,android默认支持的编码方式为UTF-8

字节数组——>字符串

public String bytes2String(byte[] bytes,String charsetName){try{//如果不指定charsetName,直接new String(bytes)默认使用utf-8

return (newString(bytes,charsetName));

}catch(UnsupportedEncodingException e) {

e.printStackTrace();return null;

}

}

字符串——>字节数组

public byte[] string2bytes(String str,String charsetName){//同样,如果不指定编码集的话就是用默认编码

try{returnstr.getBytes(charsetName);

}catch(UnsupportedEncodingException e) {

e.printStackTrace();return null;

}

}

在android中字节数组和字符串之间的转换还可以借助EncodingUtils这个类

(byte[] data,Stringcharset)

InputStream——>byte[]

public byte[] inputStream2Bytes(InputStream inStream) {

ByteArrayOutputStream swapStream= newByteArrayOutputStream();byte[] buff = new byte[100];int rc = 0;try{while ((rc = inStream.read(buff, 0, 100)) > 0) {

swapStream.write(buff,0, rc);

}returnswapStream.toByteArray();

}catch(IOException e) {

e.printStackTrace();return null;

}

}

byte[]——>inputstream

public InputStream byte2InputStream(byte[] bytes){return newByteArrayInputStream(bytes);

}

关于java的io流的一些说明:

输入流:只能够读取(将物理节点的值读取到内存的byte[]数组等)如fileInputstream.read(buffer);是将物理文件中的数据读取到buffer中

方向是物理节点——>buffer

输出流:将具体的数值写入(文件或其他)输出流 。如fileOutputStream.write(“我是测试数据”);方向是buffer/string——>物理节点

一、字节流和字符流

java的io分为两大类,字节流和字符流。可以认为能够用写字板打开的文本文件为字符。

字节流:以inputstream,outputstream为基类

字符流:以reader、writer为基类

一般,如果操作的是文本文件,可以直接使用字符流

二、节点流和包装流

节点流:如果(输入流)构造函数中传递的是具体的物理节点,那么是节点流。如

byteArrayInputStream(byte[] ),byteArrayOutputStream()

FileInputStream(File );FileOutputStream(File file,booolean append);后一个参数指定是覆盖还是添加

如果文件名不存在,但是上一级的目录存在,FileInputStream构造函数会自动创建新文件,否则,需要首先使用makeDirs将目录创建出来

以及与之对应的字符流

CharArrayReader,CharArrayWriter

FileReader,FileWriter

包装流:构造函数中的参数为节点流的流

(Readerin);该类有一个readline方法,可以方便地读取文本文件中的一行。(Writerout)

使用缓冲流可以提高输入输出的效率,

又如对象流:(InputStreaminput),(OutputStreamoutput) 分别拥有readObject和writeObject方法,可以用于对象的序列化

又比如转换流,也可以看作是包装流。

(InputStreamin,StringcharsetName);构造函数中可以指定编码。若不指定采用默认编码

这两个流将字节流转换为字符流,方便文本文件的处理,并且由于可以指定编码,在解决乱码中可以很方便的采用。

比如,读取一个文本文件中的内容,就可以这样包装

FileInputStream——>InputStreamReader——>BufferedReader

当然,也可以有其他方法

java byte数组转化为流_java中字节数组和字符串、IO流和字节数组之间的转换相关推荐

  1. Java中的File类和IO流

    Java中的File类和IO流 File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. File的分隔符 import java.io.Fi ...

  2. java数值型转字符型_Java中数值型,字符型及字符串的相互转换

    Java中数值型,字符型及字符串的相互转换由广州疯狂软件教育java培训分享: 刚开始学习Java不就前些时日被转换问题搞得有点凌乱在这里整理一下. 1.字符型与数值型之间的转换 (1)要将一个整数转 ...

  3. Java基础巩固(二)异常,多线程,线程池,IO流,Properties集合,IO工具类,字符流,对象流,Stream,Lambda表达式

    一.异常,多线程 学习目标 : 异常的概述 异常的分类 异常的处理方式 自定义异常 多线程入门 1 异常的概述 1.1 什么是异常? 异常就是程序出现了不正常情况 , 程序在执行过程中 , 数据导致程 ...

  4. data后缀文件解码_Java语法进阶13-文件、IO流

    File File是文件和目录路径名的抽象表示形式,即File类是文件或目录的路径,而不是文件本身,因此File类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流. File ...

  5. Java中long(Long)与int(Integer)之间的转换

    文章目录 Java中long(Long)与int(Integer)之间的转换方式 一.将long型转化为int型,这里的long型是基础类型: 二.将Long型转换为int型,这里的Long型是包装类 ...

  6. 计算机模拟量与数字量的转换,在S7-1200 CPU中,如何实现模拟量数值与工程量数值之间的转换?...

    在S7-1200 CPU中,如何实现模拟量数值与工程量数值之间的转换?本例程中的程序使用类似于STEP7 中提供的FC105/106.用户可以使用它们将模拟量输入/输出的整数数值与工程量单位之间进行转 ...

  7. 在C++Builder中可以利用FireMonkey的函数实现RGB与HSL之间的转换

    RGB转换为HSL的算法一般需要自己编写,但是在C++Builder中可以利用FireMonkey的函数实现RGB与HSL之间的转换. 下面是利用FireMonkey的RGBtoHSL和HSLtoRG ...

  8. Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换

    一 :3d空间坐标系  x,y,z 轴 z轴方向确定有两种方式 左手坐标系和右手坐标系 左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向. 右手坐标系:伸开右 ...

  9. java 网络通讯用什么流_Java中打印流,网络通信协议,TCP通信的基础介绍

    1-1.打印流 java.io.PrintStream:打印流 PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式. PrintStream特点: 1).只负责数据 ...

最新文章

  1. Javascript中的深拷贝和浅拷贝
  2. oracle视图能增删改,oracle视图的增删改
  3. 算法优化:rgb向yuv的转化最优算法,快得让你吃惊!
  4. C++如何使用puff()的示例
  5. Laravel分页设置与查询构造器查询数据集转为数组
  6. Kaggle入门 (Titanic TensorFlow Softmax)
  7. 从pg_hba.conf文件谈谈postgresql的连接认证
  8. Linux软链接的使用
  9. SpringBoot通过yml和xml文件配置日志输出
  10. JS记坑 ----- children返回的类数组
  11. 循环队列的实现笔记-c++
  12. waitpid使用实例
  13. 专利交底书怎么写 -
  14. 实用的网站、工具(科研学术、wps、作图、教程和文档、在线开发工具、在线编程学习、文档笔记工具、办公工具、写作、设计制作类、素材库)
  15. 中兴新支点操作系统——背景、徽标大起底
  16. 【优化算法】多目标灰狼优化算法(MOGWO)【含Matlab源码 099期】
  17. nlp中的实体关系抽取方法总结
  18. Soda Theme sublime 自定义编辑器主题
  19. 基于TCRT5000红外循迹模块DIY
  20. Apk反编译工具查看layout 和java源码的工具

热门文章

  1. Flume中的HDFS Sink配置参数说明
  2. EventLog实现事件日志操作
  3. 物理建模——组件图、部署图
  4. 北斗导航 | GPS原理与接收机设计——青冥剑(载波、伪码)
  5. 时差相关公式python实现
  6. 应用分类算法,预测泰坦尼克号乘客幸存结果
  7. MySQL课堂知识点(燕十八老师课堂)
  8. 评委拍案叫绝、项目惊喜不断,这是一届怎样的 Hackathon ?丨TiDB Hackathon 2021 回顾
  9. 亚马逊跨境电商靠谱吗?需要代运营来入手?进来看就知道了!
  10. Android获取系统版本号、软件版本号