java读取文件时,InputStream的read(byte[])方法的byte[]的长度不知如何设置,请教大虾们

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java读取文件时,InputStream的read(byte[])方法的byte[]的长度不知如何设置,请教大虾们相关的知识,希望对你有一定的参考价值。

现在是将文件保存到数据库中,数据库用的是oracle10g 版本10.2,其中InputStream的read(byte[])方法的byte[]的长度不知如何设置,请教大虾们

部门程序如下:
byte[] buffer = new byte[8];
int nread = 0;
while ((nread = byteIn.read(buffer)) != -1)

blobOutputStream.write(buffer);


在这里,为了方便表示,我把数组的长度定义为8
如果读取的文件内容为"12345678",那么通过上面的程序保存到数据库中是正常的"12345678";
如果读取的文件内容为"1234567890",那么通过上面的程序保存到数据库中是"1234567890345678",是错误的,比正常的多了6位"345678";
请教:如何设置这个数组的长度,才能得到正确的结果?

那个长度应该只是缓冲区而已,应该不影响结果的。我做的时候一般都设置为1024,即1KB
这个是我部分的成功代码
inputStream = new BufferedInputStream(new FileInputStream(
downloadFile));
outputStream = new BufferedOutputStream(response
.getOutputStream());
byte[] buffer = new byte[1024];
int readIndex;
while (-1 != (readIndex = inputStream.read(buffer, 0,
buffer.length)))
outputStream.write(buffer, 0, readIndex);
参考技术A buffer 只是一个缓冲字节数组
blobOutputStream.write(buffer,0,nread );
第三个长度是每次读出字节的长度,缓冲数组设置大点 2048即可
参考技术B 你代码里面的nread这个变量记录了read()实际读取的数据量,所以blobOutputStream.write(buffer);
这一句是有问题的,不能直接write整个buffer,只能write nread这么多个字节
buffer的长度可以根据实际情况设置,就是看数据规模,一般设置成2的多少次方的大小
参考技术C 谁说是尽量填满???
b只是当个缓冲区用。这个read方法返回实际读取的长度。
如果每次都一样,那就根本不用返回了。每次都一样长,那还叫流
参考技术D byte[] buffer = new byte[8];
int nread = 0;
while ((nread = byteIn.read(buffer)) != -1)

blobOutputStream.write(buffer,0,nread);


nread不是记录了读到了多少字节吗?追问

谢谢

java IO 学习

java IO 编程是指通过java 程序来操作文件。比如文件的读写,删除,备份等。
需要掌握文件流的基本概念。 掌握IO编程方法,把握字节流和字符流
文件在程序中是以流的形式来操作的
什么是字节流:字节流是以字节为单位byte去读取的,字节流可以用于读取二进制文件以及任何类型的文件
什么是字符流:字符流是以字符为单位去读取的 字符流可以读取文本文件。不能操作二进制文件
输入: 字节流 InputStream 字符流 Reader
输出: 字节流 OutputStream 字符流 Wirter
 
IO编程--File 类
要做java IO 编程就需要导入java.io包
import java.io.*;
 
使用File类获取到文件对象。 File类只能获取到文件对象 而无法读取或者写入文件
package File_IO;
import java.io.*;
/**
* 主要是学习java的文件IO操作, java IO 操作需要导入java.io包里面包含了所有的java io 类
* Created by admin on 2017/8/27.
*/
public class JavaIO {
public static void main(String[] args){
// File 类的使用需要传入文件作为参数, 获取文件对象
File file = new File("E:\\PythonCode\\spider\\China\\20170201152643\\iast0ic4wfw.jpg");
// 获取到File对象之后,我们就能获取文件的一些属性
// file.canExecute() 返回布尔值 文件是否可以执行
// file.canRead() 返回布尔值 文件是否可读
// file.canWrite() 返回布尔值 文件是否可写
// file.delete() 删除该文件
// file.exists() 文件是否存在
// file.getPath() 获取文件路径
// file.isFile() 是否是文件
// file.isDirectory() 是否是目录
// file.isHidden() 是否是隐藏文件
// file.length() 文件大小 单位是字节
}
}
 
使用java的File类创建文件和文件夹
 
File file = new File("C:\\java.txt");
if (!file.exists()){
// 如果不存在该文件则创建,使用createNewFile方法创建
// createNewFile 方法必须要捕获异常
try {
ff.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
 
// 使用File 类创建文件夹
File directory = new File("C:\\IO");
// 创建文件夹
if (directory.isDirectory()){
System.out.println("文件夹已经存在");
 
}else {
// 创建文件夹。如果是mkdirs()则是递归创建目录
directory.mkdir();
}
 
使用File类列出一个文件夹下面的所有文件(非递归)
File all = new File("C:\\");
// listFiles() 会返回文件对象的数组
File filelist[] = all.listFiles();
for (File files: filelist){
System.out.println(files);
}
 
// IO 编程 使用FileInputStream读取文件内容。因为File类没有读写的功能。因此需要使用FileInputStream
 
File binFile = new File("F:\\test.txt");
FileInputStream inputStream=null;
try {
inputStream = new FileInputStream(binFile);
// 定义一个字节数组,相当于缓存,一次读取这么多的数据,避免读取超大文件时内存被撑爆
byte []bytes = new byte[1024];
// 定义的end 代表如果文件实际大小没有我们定义的1024 则以实际大小为准
int end=0;
while ((end=inputStream.read(bytes))!=-1){
String s = new String(bytes, 0, end);
System.out.println(s);
// System.out.write(bytes, 0, end);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
// 关闭文件
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
 
java IO 编程,从键盘接收用户输入的数据,写入文件。 要写入文件需要用到FileOutputStream
从键盘接收y用户输入需要用到System.in 和 BufferedReader
//
File fileObj = new File("C:\\object.txt");
FileOutputStream fileOutputStream=null;
if (!fileObj.exists()){
fileObj.createNewFile();
}
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String string = null;
string = bufferedReader.readLine();
try {
// 字节输出流
fileOutputStream = new FileOutputStream(fileObj);
// byte []bytes = new byte[1024];
fileOutputStream.write(string.getBytes());
}catch (FileNotFoundException e){
e.printStackTrace();
}finally {
if (fileOutputStream !=null){
fileOutputStream.close();
}
}
 
 
java IO 编程 文件复制。 文件复制,是一个输入流, 一个输出流。都需要用到。需要先把文件读取到内存,然后写入指定的位置
 
// 复制文件
FileInputStream fileInputStream=null;
FileOutputStream fileOutputStream1=null;
File cpFile = new File("D:\\sqlback\\all.sql");
File pasteFile = new File("C:\\all.sql");
try {
if (cpFile.exists()){
fileInputStream = new FileInputStream(cpFile);
byte []readbyte = new byte[1024];
int fileEnd=0;
fileOutputStream1 = new FileOutputStream(pasteFile);
while ((fileEnd=fileInputStream.read(readbyte))!=-1){
// 读取到文件数据之后 写入其他位置,完成复制
fileOutputStream1.write(readbyte);
}
 
}
}catch (Exception e){
e.printStackTrace();
}finally {
if (fileInputStream !=null){
fileInputStream.close();
}
if (fileOutputStream1 !=null){
fileOutputStream1.close();
}
}
 
Java io 编程,读取一个文本文件的内容,写入另一个文件。 读写文本文件需要使用字符流FileReader, FileWriter
 
FileReader fileReader=null;
FileWriter fileWriter=null;
try {
char cache[]= new char[1024];
int readchar=0;
fileReader = new FileReader("F:\\test.txt");
fileWriter = new FileWriter("C:\\cp-test.txt");
while ((readchar=fileReader.read(cache))!=-1){
// System.out.println(String.valueOf(cache));
fileWriter.write(cache);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if (fileReader !=null){
fileReader.close();
}
if (fileWriter !=null){
fileWriter.close();
}
}
 
Java IO 编程 缓冲字符流。 有时候当读取一个文件比较大的时候。我们不可能全部读进内存,我们需要一次读取一点缓存到内存当中。因此就需要缓存字符流。 缓存字符流又分为BufferReader和BufferWriter。直接操作String
 
// BufferReader BufferWriter 的使用
BufferedReader bufferedReader1=null;
BufferedWriter bufferedWriter=null;
try{
// BufferReader BufferWriter
FileReader fr = new FileReader("F:\\test.txt");
bufferedReader1 = new BufferedReader(fr);
FileWriter fw = new FileWriter("C:\\okc.txt");
bufferedWriter = new BufferedWriter(fw);
// 循环读取
String s="";
// BufferReader 读取到的内容不包含任何行的终止符,比如换行符
// 因此当你读取一个文件写入写入另外一个文件时,你会发现写入的内容没有换行符,需要我们写文件时自己加上去
while ((s=bufferedReader1.readLine())!=null){
fw.write(s+"##$$");
}
 
}catch (Exception e){
e.printStackTrace();
}finally {
if (bufferedReader1 !=null){
bufferedReader1.close();
}
if (bufferedWriter != null){
bufferedWriter.close();
}
}

以上是关于java读取文件时,InputStream的read(byte[])方法的byte[]的长度不知如何设置,请教大虾们的主要内容,如果未能解决你的问题,请参考以下文章

java读取文件时,InputStream的read(byte[])方法的byte[]的长度不知如何设置,请教大虾们

java 中inputstream 和outputstream 怎么进行文件的读取写入的??

Java 的 inputStream 读取文本内容

java io流如何读取文件效率高

java如何读取InputStream中的字符串

java InputStream读取数据问题