/*当我们对二进制的文件处理的时候,我们应该使用FileInputStream和FileOutputStream。
当我们操作文件的时候,可以首先使用File类得到对这个文件的引用,例如
File file = new File("Idea.jpg");然后把file作为参数传给FileInputStream或者FileOutputStream得到相应的输入流或者输出流。通常我们对文件无非是进行读写,修改,删除等操作。最重要的就是读写操作。当我们读文件的时候应该使用InputStream,写文件的时候使用OutputStream。read()方法是在InputStream中定义的,它是个抽象方法。InputStream当然也是个抽象类,我们得到的实例都是它的子类,例如FileInputStream,子类如果不是抽象类的话就要实现父类的抽象方法。在FileInputStream中不但实现了read()并且重载了这个方法提供了read(byte[] buffer)和read(byte[] buffer,int off,int length)两个方法。下面详细介绍一下:
read()方法将读取输入流中的下一个字节,并把它作为返回值。返回值在0-255之间,如果返回为-1那么表示到了文件结尾。用read()我们可以一个一个字节的读取并根据返回值进行判断处理。
while((ch = image.read())!=-1)
{
System.out.print(ch);
newFile.write(ch);
}
read(byte[] buffer)会把流中一定长度的字节读入buffer中,返回值为实际读入buffer的字节长度,如果返回-1表示已经到了流的末尾。
while((ch = image.read(buffer))!=-1)
{
System.out.println(ch);
newFile.write(buffer);
}
read(byte[] buffer,int off,int length)的意思是把流内length长度的字节写入以off为偏移量的buffer内,例如off=7,length=100的情况下,这个方法会从流中读100个字节放到buffer[7]到buffer[106]内。返回值为实际写入buffer的字节长度。
while((ch = image.read(buffer,10,500))!=-1)
{
System.out.println(ch);
newFile.write(buffer,10,500);
}
对上面的方法进行介绍的时候我们没有考虑异常的情况,读者应该参考API doc进行必要的了解。当我们对流操作的时候,有的时候我们可以对流进行标记和重置的操作,当然要流支持这样的操作。参考一下mark(),reset()和markSupported()方法的说明。最后在使用结束后,确保关闭流,调用close()方法。由于FileOutputStream的write相关的方法和FileInptutStream的read()非常类似,因此不再多说。下面提供一个例子说明如何对二进制文件进行操作,我们打开一个JPEG格式的文件,通过三种不同的方式读取内容,并生成一个新的文件。运行结束后你会发现这两个文件完全一样!
*/
import java.io.*;
public class LinkFile{
public static void main(String[] args) throws IOException{
linkBinaryFile("chj.jpg");
}
private static void linkBinaryFile(String fileName) throws IOException{
File imageFile = new File(fileName);
if(!imageFile.exists()&&!imageFile.canRead()){
System.out.println("can not read the image or the image file doesn't exists");
System.exit(1);
}
long length = imageFile.length();
int ch = 0;
System.out.println(length);
byte[] buffer = new byte[(int)length/7];
InputStream image = new FileInputStream(imageFile);
File file = new File("hello.jpg");
if(!file.exists()){
file.createNewFile();
}
FileOutputStream newFile = new FileOutputStream(file,true);
boolean go = true;
while(go){
System.out.println("please select how to read the file:\n"+
"1: read()\n2:read(byte[] buffer)\n3:read(byte[] buffer,int off,int len)\n");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
if(line.equals("1")){
while((ch = image.read())!=-1){
System.out.print(ch);
newFile.write(ch);
}
}else if(line.equals("2")){
while((ch = image.read(buffer))!=-1){
System.out.println(ch);
newFile.write(buffer);
}
}else if(line.equals("3")){
while((ch = image.read(buffer,10,500))!=-1){
System.out.println(ch);
newFile.write(buffer,10,500);
}
for(int i = 0;i<10;i++){
System.out.print(buffer[i]);
}
}
go = false;
}
image.close();
newFile.close();
}
}
分享到:
相关推荐
在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...
### Java 二进制文件的读写操作 在Java中,进行二进制文件的读写操作是非常常见的需求,尤其是在处理非文本类型的文件(如图片、音频或视频等)时。本文将详细介绍如何使用`FileInputStream`和`FileOutputStream`类...
本篇文章将基于提供的代码示例,深入探讨如何使用`FileInputStream`和`FileOutputStream`进行二进制文件的读取和写入,并分析其中的关键点和技术细节。 #### 关键类和方法介绍 1. **FileInputStream**: - **构造...
### Java读取二进制文件知识点详解 ...- 考虑到二进制文件的特殊性,尽量使用`DataInputStream`等高级流来进行操作,以简化数据读写过程。 以上就是关于“Java读取二进制文件”的详细介绍,希望对你有所帮助。
本文主要介绍了利用Java读取二进制文件的相关知识点,通过示例代码详细介绍了读取二进制文件的实现方法,对大家的学习或者使用Java具有一定的参考学习价值。 一、Java读取二进制文件的必要性 在计算机科学和信息...
主要为大家介绍了Java基于TCP方式的二进制文件传输,一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成,感兴趣的小伙伴们可以参考一下
在Java编程语言中,对二进制文件的操作是非常常见的需求之一,尤其是在处理图像、音频等非文本数据时。Java的标准库`java.io`提供了丰富的API来支持这些操作,其中`OutputStream`及其子类是进行二进制数据写入的核心...
本教程将详细介绍如何使用Java语言读取二进制文件并将其内容输出到新的文件夹中。 首先,我们要理解Java中的File类,这是操作文件的基础。File对象可以表示文件或目录路径,用于创建、删除、重命名文件以及获取文件...
本篇文章将深入探讨Java中的二进制IO类,并通过一个具体的文件复制操作实例来说明其应用。 1. **Java IO流基础** Java的IO流模型基于“流”的概念,数据被当作一串连续的数据流进行处理。IO流分为两类:字节流...
在Java中,读取二进制文件通常使用`java.io`包中的`FileInputStream`类。通过创建`FileInputStream`对象并调用其`read()`方法,可以逐字节地读取文件内容。为了正确处理二进制数据,开发者需要了解文件格式,并可能...
以下是一个简单的示例,展示了一个使用`byte[]`和`DataHandler`传输二进制文件的WebService类: ```java package service; import java.io.InputStream; import java.io.OutputStream; import java.io....
这篇博客“Java调用MATLAB,将文件转换为二进制流”详细介绍了如何利用Java调用MATLAB的功能来处理文件,将其转换为二进制流。这种技术在数据处理、文件传输或存储等领域非常有用,因为二进制格式可以更高效地处理...
在Java中,可以使用`Integer.toBinaryString()`方法来将一个整数转换为二进制字符串。例如: ```java int decimalNumber = 10; String binaryString = Integer.toBinaryString(decimalNumber); System.out.println...
下面是一个使用Java读取MYSQL数据库中的二进制文件的示例代码: ```java package com.lizhe; import java.io.*; import java.sql.*; class GetImg { private static final String URL = "jdbc:mysql://localhost/...
1. **连接数据库**:使用合适的数据库驱动(例如Java的JDBC,Python的psycopg2等)连接到数据库,获取存储图片的二进制字段。你需要知道数据库的URL、用户名、密码以及查询图片的SQL语句。 2. **读取二进制流**:...
在给定的代码示例中,展示了如何使用Java连接到Access 2010数据库并读取存储为二进制流的图片数据,然后将这些二进制流转换回图片文件。以下是对这个过程的详细解释: 首先,为了连接到Access数据库,我们需要引入...
但是,由于Android自身的特性(如应用程序的安全沙箱、资源管理机制等),直接在Android上运行二进制文件与在普通Linux系统上有所不同。 #### 知识点二:传统方式与新方法的区别 在Android中,通常有两种方式来...
在Java中,我们可以使用`Integer.parseInt()`或`Integer.valueOf()`方法将二进制字符串转换为整数。这些方法接受两个参数:一个字符串和一个基数(在这种情况下是2,因为是二进制)。如果字符串无法转换为指定基数的...
本压缩包“hyperledger-fabric-linux-amd64-1.1.0”是针对Linux 64位系统的Hyperledger Fabric版本1.1.0的二进制文件,包含了运行和部署Fabric网络所需的全部组件。 1. **Hyperledger Fabric架构**:Hyperledger ...
综上所述,MySQL提供了存储大文本和二进制文件的能力,而Java的`BufferedInputStream`和`BufferedOutputStream`则是处理文件流、提高I/O效率的重要工具。正确理解和使用这些技术和数据类型,可以有效地管理和处理大...