Java笔记(14)

您所在的位置:网站首页 java字节数组转file Java笔记(14)

Java笔记(14)

2024-07-12 19:26| 来源: 网络整理| 查看: 265

与之前的文件流不同,之前的所有文件流,读取文件的位置,也就是源,其实都是在磁盘之中,Java无法直接访问,是需要通过操作系统的帮助才行;但是ByteArray不一样,他就叫字节数组,就只是一个地方的某个内存数据而已,Java可以直接访问;

jvm虚拟机只能访问内存数据,字节数组就是一些重要的内存数据(二进制),使用Java操作这一组二进制流时,就是使用字节数组流的方式操作;更重要的是数据(如字符串等)都可以转化成字节数组,有利于以后从服务器提取数据,方便进行网络的传输;

注意点

转化成字节数组的量要小,否则内存很容易过多;字节数组流不需要关闭;任何数据都可以转化成字节数组; 1. ByteArrayInputStream和ByteArrayOutputStream的基础使用

以下就是详细的介绍; 虽然说和之前的文件流有些区别,但是总的来说使用的步骤还是差不多的;第一步先找到源(这里的源不是指文件);第二步定义流;第三步执行操作;第四步在这里不需要 1. ByteArrayInputStream的基础使用

public class TextByteArrayIn { public static void main(String[] args) { InputStream bais = null; String s = null; int len = -1; //定义一个源,这个源不再是文件,可以暂时使用数据代替; byte[] msg = "我的博客".getBytes(); //生成一个对象,使用ByteArrayInputStream的构造方法; bais = new ByteArrayInputStream(msg); //在底下定義一個字节数组,大小为3,也就是每次取三个字节;(这是UTF-8) byte[] data = new byte[3]; try{ //循环,知道字节全部取完; while ((len=bais.read(data))!=-1) { //使用String类的构造方法,将字节直接转化成字符串; s = new String(data,0,len); System.out.println(s); } }catch(IOException e){ e.printStackTrace(); } } }

2. ByteArrayOutputStream的基础使用

public class FileByteArrayOut { public static void main(String[] args) { ByteArrayOutputStream out = null; int len = -1; //定义一个源(当然这个源不是文件),以后也可以是从输入流中得到; byte[] msg = "神秘的天".getBytes(); //定义流 out = new ByteArrayOutputStream(); //在这里写入使用write out.write(msg,0,msg.length); byte[] b= out.toByteArray(); //由于前面out已经调用了write方法写入了数据,所以最后输出out里面的数据就可以了; System.out.println(out.toString()); System.out.println(b.length); } } 2.怎么通过ByteArrayInputStream和ByteArrayOutputStream复制文件

感觉使用这个方法来复制文件有些,多此一举;不过要明白它不止可以复制文件,最重要的是可以直接复制内存中的数据;作为一名新手,我觉得很好;可以用来练习,以便熟练掌握这些基础技能;还是要多练啊;😛

//这个方法想写一个通过字节数组来进行文件的复制,当然其中还是要使用到基础字节流; public class FileByteCopy { //先写一个从文件读取数据到字节数组; public byte[] FileToArray(String src) { int len = -1; //确定一个流; File file = new File(src); ByteArrayOutputStream baout = null; InputStream in = null; //定义一个流 baout = new ByteArrayOutputStream(); try { in = new FileInputStream(file); //定义一个字节数组; byte[] arr = new byte[1024 * 10]; while ((len = in.read(arr)) != -1) { baout.write(arr, 0, len);//第一个变量byte数组;第二个起始位置;第三个总长度; } return baout.toByteArray(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } return new byte[0]; } //这个方法则是将字节数组的值再写入到文件里面; public void ArrayToFile(byte[] arr,String din) { //定义一个源 File file = new File(din); int len = -1; OutputStream outs = null; ByteArrayInputStream bain = null; //定义流 try { bain = new ByteArrayInputStream(arr); outs = new FileOutputStream(file); while ((len = bain.read()) != -1) { outs.write(arr, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { outs.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { FileByteCopy f = new FileByteCopy(); byte[] brr = f.FileToArray("./src/Ucopy.jpg"); f.ArrayToFile(brr,"d.jpg"); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3