关于输入流与输出流

在这里需要强调的一点是:

输入流和输出流,差别在于出和入,是相对于程序而言的。“输入流式得到数据,输出流是输出数据”。输入是程序得到外部数据,输出是程序向外部传输数据,二者没有必然的联系,都是流,差别是方向不同,也就是说,程序可以只有输入流而没有输出流,或者只有输出流而没有输入流。

伪代码如下:

OutputStream oos = null; //
InputStream iis = null; // 从本地读入
iis = new BufferedInputStream(new FileInputStream(new File(filename)));// 通过输入流读取图片数据,其中filename代表文件路径
byte[] bs = new byte[1024];
int length = -1;
while ((length = iis.read(bs, 0, bs.length)) != -1) {//如果是输出的话,这里就是write函数了
oos.write(bs, 0, length);
oos.flush();
}

但是由于开发者的系统不同以及电脑磁盘位置不同

所以这里可以用到一个常用的Java系统属性

String s=System.getProperty("user.home") ; //获取相应的文件位置

这里对数据库中对图片的存储也说明一下:

public void saveCommodity(List<String> sqls, List<List<Object>> params,
String cid, String filename) throws SQLException {
DBHelper db = new DBHelper();
// 在根据新编号查出cphoto这个列,以流的方式插入
String sql2="select photo from tb_record where id=? for update";
//String sql1 = "update tb_record set photo=? where RECORD_NUMBER=? ";//
Connection con = null;
try {
con = db.getcon();
con.setAutoCommit(false);
PreparedStatement pstmt = null;
for (int i = 0; i < sqls.size(); i++) {
String sql = sqls.get(i);
pstmt = con.prepareStatement(sql);
List<Object> param = params.get(i);
for (int j = 0; j < param.size(); j++) {
pstmt.setObject(j + 1, param.get(j));
}
pstmt.executeUpdate();
}
if (filename != null && !filename.equals("")) {
pstmt = con.prepareStatement(sql2);
pstmt.setString(1, cid);
ResultSet rs = pstmt.executeQuery();
if (rs != null && rs.next()) {
OutputStream oos = null; // 向数据库中输入图片
InputStream iis = null; // 从本地读入
oracle.sql.BLOB b = (oracle.sql.BLOB) rs.getBlob(1);
oos = b.getBinaryOutputStream(); // 从结果集中取出输入流,用于向数据库些数据
iis = new BufferedInputStream(new FileInputStream(new File(
filename)));
// 通过输入流读取图片数据
byte[] bs = new byte[1024];
int length = -1;
while ((length = iis.read(bs, 0, bs.length)) != -1) {
oos.write(bs, 0, length);
oos.flush();
}
}
}
con.commit();
} catch (Exception e) {
e.printStackTrace();
con.rollback();
} finally {
con.setAutoCommit(true);
con.close();
}

}

时间: 2024-11-29 11:51:43

关于输入流与输出流的相关文章

C++输入流与输出流中使用控制符

dec--设置数值的基数为10 hex--设置数值的基数为16 oct--设置数值的基数为8 setfill(c)--设置填充字符c,c可以是字符常量,也可以是字符变量 setprecision(n)--设置浮点数的精度为n位,一般以十进制小数位输出,n代表有效数字,在以fixed(固定小数位数)和scientific(指数)形式输出时,n为小数位数 setw(n)--设置字段宽度为n位 setiosflags(ios:fixed)--设置浮点数为固定的小数位显示 setiosflags(ios

day20 文件输入流和输出流FileInputStream FileOutputStream

1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流. 流按操作类型分为两种: 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的 字符流 : 字符流只能操作纯字符数据,比较方便. 2.IO流常用父类 字节流的抽象父类: InputStream OutputStream 字符流的抽象父类: Reader Writer IO流(FileInputStream)read()一

网络通信中基于套接字输入流和输出流的创建

基本方法 要实现套接字的网络通信,需要分四个步骤完成: (1)创建套接字Socket,连接成功后形成网络连接通道: (2)由套接字对象Socket调用getInputStream()或getOutputStream()方法,分别返回具有套接字通信的基础输入流InputStream和输出流OutputStream对象作为参数,完成绑定套接字通信的输入流和输出流对象的创建. (3)用输入和输出流对象调用其对应方法的操作方式实现网络通信: (4)网络通信结束,需要关闭输入流和输出流对象,尤其要关闭套接

(七)输入流、输出流

一.基础知识 1.IO流用来处理设备之间数据的传输 2.输入流和输出流相对于内存设备而言 将外设中的数据读取到内存中:输入 将内存的数据写入到外设中:输出 例子: 内存——>硬盘  输出    写 内存>——硬盘  输入    读 3.流按操作数据分为两种:字节流与字符流 字符流的由来:字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字.在对这个文件进行操作.简单滴说:字节流+编码表 4.流按流向分为:输入流.输出流 5.Java对数据的操作都是通过流的方式 6.Java

输入流与输出流的理解

1.程序操作的数据都应该是在内存里面,内存是你操作的主对象,把数据从其他资源里面传送到内存里面,就是输入,反之,把数据从内存传送到其他资源,就是输出. (1)读文件 BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("infilename"))); 不管你从磁盘读,从网络读,或者从键盘读,读到内存,就是InputStream. (2)写文件 BufferedWriter ou

File类--输入流和输出流

创建文件对象:可以是物理文件或目录,操作文件或目录的属性(路径.权限.日期和时间等) 通过流来读写文件,流是一组有序的数据序列,以先进先出方式发送信息的通道 很多的信息,都是通过文件来读取的,文件是数据源 对于程序来说,把文件读入到程序中,这是输入,把资料读出去是是输出. 在Java中流的分类: 按流向区分: 1.输出流---->OutputStream和Writer作为基类 2.输入流---->InputputStream和Reader作为基类 输入输出流是相对于计算机内存来说的 按照处理数

Java:字节流和字符流(输入流和输出流)

本文内容: 什么是流 字节流 字符流 首发日期:2018-07-24 什么是流 流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道. 输入流是相对程序而言的,外部传入数据给程序需要借助输入流. 输出流是相对程序而言的,程序把数据传输到外部需要借助输出流. 什么是字节流? 字节流--传输过程中,传输数据的最基本单位是字节的流. 什么是字符流? 字符流--传输过程中,传输数据的最基本单位是字符的流. 字符编码方式不同,有时候一个字符使用的字节数也不一样,

C++输入流和输出流、缓冲区

一.C++输入流和输出流 输入和输出的概念是相对程序而言的. 键盘输入数据到程序叫标准输入,程序数据输出到显示器叫标准输出,标准输入和标准输出统称为标准I/O,文件的输入和输出叫文件I/O. cout--标准输出流,全局流对象,输出数据到显示器 cin--标准输入流,键盘输入数据到程序 cerr--标准错误,输出数据到显示器 clog--标准日志,输出数据到显示器//cerr没有缓冲区,clog有缓冲区 1.标准输入流 标准输入流对象cin,重点掌握的函数: cin.get() //一次只能读取

【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级

文件重定向 #include<iostream> using namespace std; void main() { char str[30] = { 0 }; cin >> str; cout << str; system(str); cerr << "error for you"; cin.get(); cin.get(); } 键盘输入流 #include<iostream> #include <stdlib.h