`

读取Java文件到byte数组的三种方式

    博客分类:
  • Java
 
阅读更多
[java]view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. packagezs;
  2. importjava.io.BufferedInputStream;
  3. importjava.io.ByteArrayOutputStream;
  4. importjava.io.File;
  5. importjava.io.FileInputStream;
  6. importjava.io.FileNotFoundException;
  7. importjava.io.IOException;
  8. importjava.io.RandomAccessFile;
  9. importjava.nio.ByteBuffer;
  10. importjava.nio.MappedByteBuffer;
  11. importjava.nio.channels.FileChannel;
  12. importjava.nio.channels.FileChannel.MapMode;
  13. publicclassFileUtils{
  14. publicbyte[]getContent(StringfilePath)throwsIOException{
  15. Filefile=newFile(filePath);
  16. longfileSize=file.length();
  17. if(fileSize>Integer.MAX_VALUE){
  18. System.out.println("filetoobig...");
  19. returnnull;
  20. }
  21. FileInputStreamfi=newFileInputStream(file);
  22. byte[]buffer=newbyte[(int)fileSize];
  23. intoffset=0;
  24. intnumRead=0;
  25. while(offset<buffer.length
  26. &&(numRead=fi.read(buffer,offset,buffer.length-offset))>=0){
  27. offset+=numRead;
  28. }
  29. //确保所有数据均被读取
  30. if(offset!=buffer.length){
  31. thrownewIOException("Couldnotcompletelyreadfile"
  32. +file.getName());
  33. }
  34. fi.close();
  35. returnbuffer;
  36. }
  37. /**
  38. *thetraditionalioway
  39. *
  40. *@paramfilename
  41. *@return
  42. *@throwsIOException
  43. */
  44. publicstaticbyte[]toByteArray(Stringfilename)throwsIOException{
  45. Filef=newFile(filename);
  46. if(!f.exists()){
  47. thrownewFileNotFoundException(filename);
  48. }
  49. ByteArrayOutputStreambos=newByteArrayOutputStream((int)f.length());
  50. BufferedInputStreamin=null;
  51. try{
  52. in=newBufferedInputStream(newFileInputStream(f));
  53. intbuf_size=1024;
  54. byte[]buffer=newbyte[buf_size];
  55. intlen=0;
  56. while(-1!=(len=in.read(buffer,0,buf_size))){
  57. bos.write(buffer,0,len);
  58. }
  59. returnbos.toByteArray();
  60. }catch(IOExceptione){
  61. e.printStackTrace();
  62. throwe;
  63. }finally{
  64. try{
  65. in.close();
  66. }catch(IOExceptione){
  67. e.printStackTrace();
  68. }
  69. bos.close();
  70. }
  71. }
  72. /**
  73. *NIOway
  74. *
  75. *@paramfilename
  76. *@return
  77. *@throwsIOException
  78. */
  79. publicstaticbyte[]toByteArray2(Stringfilename)throwsIOException{
  80. Filef=newFile(filename);
  81. if(!f.exists()){
  82. thrownewFileNotFoundException(filename);
  83. }
  84. FileChannelchannel=null;
  85. FileInputStreamfs=null;
  86. try{
  87. fs=newFileInputStream(f);
  88. channel=fs.getChannel();
  89. ByteBufferbyteBuffer=ByteBuffer.allocate((int)channel.size());
  90. while((channel.read(byteBuffer))>0){
  91. //donothing
  92. //System.out.println("reading");
  93. }
  94. returnbyteBuffer.array();
  95. }catch(IOExceptione){
  96. e.printStackTrace();
  97. throwe;
  98. }finally{
  99. try{
  100. channel.close();
  101. }catch(IOExceptione){
  102. e.printStackTrace();
  103. }
  104. try{
  105. fs.close();
  106. }catch(IOExceptione){
  107. e.printStackTrace();
  108. }
  109. }
  110. }
  111. /**
  112. *MappedFilewayMappedByteBuffer可以在处理大文件时,提升性能
  113. *
  114. *@paramfilename
  115. *@return
  116. *@throwsIOException
  117. */
  118. publicstaticbyte[]toByteArray3(Stringfilename)throwsIOException{
  119. FileChannelfc=null;
  120. try{
  121. fc=newRandomAccessFile(filename,"r").getChannel();
  122. MappedByteBufferbyteBuffer=fc.map(MapMode.READ_ONLY,0,
  123. fc.size()).load();
  124. System.out.println(byteBuffer.isLoaded());
  125. byte[]result=newbyte[(int)fc.size()];
  126. if(byteBuffer.remaining()>0){
  127. //System.out.println("remain");
  128. byteBuffer.get(result,0,byteBuffer.remaining());
  129. }
  130. returnresult;
  131. }catch(IOExceptione){
  132. e.printStackTrace();
  133. throwe;
  134. }finally{
  135. try{
  136. fc.close();
  137. }catch(IOExceptione){
  138. e.printStackTrace();
  139. }
  140. }
  141. }
  142. }
分享到:
评论

相关推荐

    读取Java文件到byte数组的三种方法(总结)

    本文将介绍三种读取Java文件到byte数组的方法,供开发者参考。 ### 方法一:传统IO方式 这种方法是最常见的读取文件的方式,使用`FileInputStream`、`BufferedInputStream`和`ByteArrayOutputStream`组合实现。 `...

    java中两个byte数组实现合并的示例

    在Java编程语言中,有时我们需要将两个或多个字节数组(`byte`数组)合并成一个新的单一数组。这种情况在处理二进制数据、文件读写或者与硬件交互时尤其常见。本文将深入探讨如何在Java中实现两个`byte`数组的合并,...

    Java byte数组与其他类型转换

    本文将深入探讨如何在Java中将byte数组与其他基本类型(如short、int、long)进行转换,这些转换在处理二进制数据、网络通信或序列化等方面至关重要。 首先,我们来看byte数组与short之间的转换。在Java中,byte...

    Java将图片转换为byte数组例子总结

    ### Java将图片转换为byte数组及反向转换的知识点总结 #### 一、知识点概述 在Java编程中,经常需要处理图像数据,特别是在网络传输或存储时,将图像转换为`byte`数组是一种常见的做法。这不仅可以提高传输效率,...

    手机移动开发将byte数组写入文件的JAVA代码

    ### 手机移动开发将byte数组写入文件的JAVA代码详解 #### 一、知识点概述 在移动开发领域,特别是Android或J2ME等平台上,经常需要处理数据的读写操作,比如将从网络获取的数据保存到本地文件系统中。本篇文章主要...

    float转byte数组测试小工具

    本工具“float转byte数组测试小工具”专注于将浮点数(float)转换为字节数组,这是一种在计算机内存中表示和传输数值的常用方式。在Java、C++、C#等编程语言中,这种转换尤其重要,因为它们使用不同的数据结构来...

    拼接byte数组

    在文件读取和网络通信中,我们可能会遇到分块的数据,比如在处理大文件时,可能会先读取一部分数据到`byte`数组,然后再读取另一部分,最后需要将这些部分合并。`read_struct`这样的命名可能暗示我们在处理结构化的...

    字节数组流byte文件

    标题“字节数组流byte文件”中涉及的概念是字节数组流(byte array stream),这是一种在计算机程序中处理二进制数据的方式。字节数组流通常用于在内存中传输和接收字节数据,尤其在处理文件、图片、PDF、Excel或...

    java基本类型与byte数组互相转换

    ### Java基本类型与Byte数组互相转换 在Java编程语言中,基本类型的变量(如`short`、`int`、`long`、`char`、`double`和`float`)和`byte`数组之间的相互转换是一项非常实用的技术,尤其是在网络通信、文件读写等...

    java中把对象转化为byte数组的方法.pdf

    Java 是一种 popular 的编程语言,它提供了多种方式来将对象转换为 byte 数组和将 byte 数组转换回对象。这种转换对于数据存储、网络传输和序列化非常重要。本文将介绍 Java 中将对象转换为 byte 数组的方法和将 ...

    byte数组转化为hex

    在Java编程中,将字节数组转换为16进制字符串是一项常见的任务,尤其是...了解这些概念对于处理二进制数据至关重要,特别是在网络编程、文件读写和数据序列化等场景中。希望以上内容能帮助你更好地理解和应用这些知识。

    取指定字节数组中的子数组 一个很好类例子

    在实际项目中,这种从字节数组中提取子数组的操作非常常见,特别是在处理网络协议、文件读写、序列化或反序列化数据时。每个类都可能根据其职责和上下文,以不同的方式利用这些基本的数组操作。不过,由于没有具体的...

    基于java中byte数组与int类型的转换(两种方法)

    在Java编程中,将`int`类型转换为`byte`数组以及从`byte`数组还原回`int`类型是常见的操作,特别是在网络编程中。这是因为网络传输的数据通常以字节流的形式存在,而`int`等基本数据类型需要进行适当的序列化才能...

    浅谈java的byte数组的不同写法

    在Java中,有几种不同的方式来初始化和表示byte数组,如下所述: 1. **二进制表示**: 我们可以用二进制数来初始化byte数组。例如,`byte[] aa = {00010110, 01010010, 10111000};` 这里每个数字都是一个8位的二...

    Java byte数组操纵方式代码实例解析

    "Java byte数组操纵方式代码实例解析" 本文主要介绍了Java byte数组操纵方式代码实例解析,通过示例代码详细介绍了Java byte数组的操纵方式,涵盖了字节数组的基本概念、字节数组的操作方法、ByteArrayInputStream...

    android bitmap通过byte数组以流的形式创建

    1. **读取字节数组**:首先,你需要获取到图片的byte数组。这可能来自于网络请求、文件读取或者本地存储。 ```java byte[] imageData = ... // 获取到的字节数组 ``` 2. **设置BitmapFactory.Options**:为了高效...

    Java 图片与byte数组互相转换实例

    在Java编程中,处理图像数据时,有时需要将图片转换为byte数组,或者将byte数组恢复为图片。这在文件传输、数据库存储或网络通信等场景中非常常见。本文将详细讲解如何在Java中实现图片与byte数组之间的转换。 首先...

    php字符串与byte字节数组转化类.zip

    介绍php字符串与byte字节数组转化类,转换一个String字符串为byte数组,将字节数组转化为String类型的数据,转换一个int为byte数组,从字节数组中指定的位置读取一个Integer类型的数据,转换一个shor字符串为byte...

    java中把对象转化为byte数组的方法.doc

    通过上述介绍,我们可以了解到Java中对象与byte数组之间的相互转换是实现对象序列化的一种常见方式。掌握了这一技能后,可以在多种应用场景中灵活运用,比如在网络传输数据、保存对象状态等方面。同时,也需要注意...

    全面了解java byte数组与文件读写

    `byte`数组是Java中存储二进制数据的基本方式,非常适合处理文件,因为文件本质上都是由二进制数据构成的。 首先,我们来看第一个获取文件内容的方法,通过`FileInputStream`类实现。这段代码首先创建了一个`File`...

Global site tag (gtag.js) - Google Analytics