Java读取文件转换成byte[]的小结

1、FileInputStream

	/**
	 * 
	 * 

Title: getContent

*

Description:根据文件路径读取文件转出byte[]

* @param filePath文件路径 * @return 字节数组 * @throws IOException */ public static byte[] getContent(String filePath) throws IOException { File file = new File(filePath); long fileSize = file.length(); if (fileSize > Integer.MAX_VALUE) { logger.info("file too big..."); return null; } FileInputStream fi = new FileInputStream(file); byte[] buffer = new byte[(int) fileSize]; int offset = 0; int numRead = 0; while (offset < buffer.length && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) { offset += numRead; } // 确保所有数据均被读取 if (offset != buffer.length) { throw new IOException("Could not completely read file " + file.getName()); } fi.close(); return buffer; }

2、ByteArrayOutputStream和BufferedInputStream传统的IO

/**
	 * 
	 * 

Title: toByteArray

*

Description: 传统的IO流方式

* @param filename * @return * @throws IOException */ public static byte[] toByteArray(String filename) throws IOException { File file = new File(filename); if (!file.exists()) { throw new FileNotFoundException(filename); } ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length()); BufferedInputStream in = null; try { in = new BufferedInputStream(new FileInputStream(file)); int buf_size = 1024; byte[] buffer = new byte[buf_size]; int len = 0; while (-1 != (len = in.read(buffer, 0, buf_size))) { bos.write(buffer, 0, len); } return bos.toByteArray(); } catch (IOException e) { e.printStackTrace(); throw e; } finally { try { bos.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } bos.close(); } }

3、NIO

/**
	 * 
	 * 

Title: toByteArrayNIO

*

Description: NIO way

* @param filename * @return * @throws IOException */ public static byte[] toByteArrayNIO(String filename) throws IOException { File file = new File(filename); if (!file.exists()) { throw new FileNotFoundException(filename); } FileChannel channel = null; FileInputStream fs = null; try { fs = new FileInputStream(file); channel = fs.getChannel(); ByteBuffer byteBuffer = ByteBuffer.allocate((int) channel.size()); while (channel.read(byteBuffer) > 0) { // do nothing // System.out.println("reading"); } return byteBuffer.array(); } catch (Exception e) { e.printStackTrace(); throw e; } finally { try { channel.close(); } catch (IOException e) { e.printStackTrace(); } try { fs.close(); } catch (IOException e) { e.printStackTrace(); } } }

4、RandomAccessFile和MappedByteBuffer读取大文件

/**
	 * 
	 * 

Title: toByteArrayMapped

*

Description: 读取大文件

* @param filename * @return * @throws IOException */ public static byte[] toByteArrayMapped(String filename) throws IOException { FileChannel fc = null; RandomAccessFile rf=new RandomAccessFile(filename, "r"); try { // fc = new RandomAccessFile(filename, "r").getChannel(); fc = rf.getChannel(); MappedByteBuffer mappedByteBuffer = fc.map(MapMode.READ_ONLY, 0, fc.size()).load(); logger.info("{}", mappedByteBuffer.isLoaded()); byte[] result = new byte[(int) fc.size()]; if (mappedByteBuffer.remaining() > 0) { // System.out.println("remain"); mappedByteBuffer.get(result, 0, mappedByteBuffer.remaining()); } return result; } catch (IOException e) { e.printStackTrace(); throw e; } finally { try { rf.close(); fc.close(); } catch (IOException e) { e.printStackTrace(); } } }

 

你可能感兴趣的:(Java,Java,文件读取)