目录
- ByteArrayInputStream/ByteArrayOutputStream
--10.1 ByteArrayInputStream(可以将字节数组转化为输入流)
--10.2 ByteArrayOutputStream(向内存中写数据,写完后可以一次性获取所有的数据)
10.ByteArrayInputStream/ByteArrayOutputStream
ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。
10.1 ByteArrayInputStream
可以将字节数组转化为输入流
1.ByteArrayInputStream构造方法
public ByteArrayInputStream(byte buf[])
public ByteArrayInputStream(byte buf[], int offset, int length)
2.ByteArrayInputStream重要方法
public synchronized int read()
public synchronized int read(byte b[], int off, int len)
3.使用ByteArrayInputStream
ByteArrayInputStream bis = new ByteArrayInputStream("haha".getBytes());
10.2 ByteArrayOutputStream
向内存中写数据,会写入到一个byte数组中,把内存当一个缓冲区,缓冲区随数据的不断写入而自动增长。
写完后可以一次性获取所有的数据,用toByteArray()/toString()获取数据
1. ByteArrayOutputStream构造方法
public ByteArrayOutputStream()
public ByteArrayOutputStream(int size)
2. ByteArrayOutputStream重要方法
public synchronized void write(int b)
public synchronized void write(byte b[], int off, int len)
public synchronized byte toByteArray()[]
public synchronized String toString()
public synchronized String toString(String charsetName) //charsetName字码表
注意:ByteArrayOutputStream的close方法无效。类中方法在close之后还可以使用。
因为缓冲区用完就释放,并没有到硬盘中读数据。(其他流到硬盘中读数据,所以需要关闭流。)
3.使用ByteArrayOutputStream
File dir = Environment.getExternalStorageDirectory();
File file = new File(dir, "abc.txt");
File dst = new File(dir, "dst4.txt");
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = -1;
byte[] buffer = new byte[1024];
while ((len = fis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
byte[] bytes = baos.toByteArray();
Log.d("xl", new String(bytes));
String str = baos.toString();
Log.d("xl", str);
fis.close();