您的位置:程序门 -> java -> j2se / 基础类



求 inputstream 的内容读到 byte数组中的代码


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求 inputstream 的内容读到 byte数组中的代码[已结贴,结贴人:highscore2]
发表于:2007-01-22 10:45:44 楼主
求   inputstream   的内容读到   byte数组中的代码
发表于:2007-01-22 10:56:331楼 得分:0
fileinputstream   fis
fis.read(...)
看下api,里面放个byte的数组接受保存数据
发表于:2007-01-22 10:59:252楼 得分:0
is.read(...)   //我也知道用read可以实现
问题是要知道大小,要预先定义byte数组的大小才行,好象inputsteam没有方法取大小的,   我就烦这个!  

发表于:2007-01-22 11:00:443楼 得分:0
to   believefym
据我所知,直接放一个byte数组是不行的,要知道大小才行.   请给一下完整的代码行吗?
发表于:2007-01-22 11:11:474楼 得分:0
用arraylist?
发表于:2007-01-22 11:20:115楼 得分:0
不管用什么,总之输入一个inputstream   对象,返回一个byte数组即可!  
java不能定义动态数组,这有点不方便.   我从其它语言转过来   ...
发表于:2007-01-22 12:00:206楼 得分:0
fileinputstream   fis   =   new   fileinputstream( "h:\\我.txt ");
byte   c[]   =   new   byte[10];
while(fis.read(c)!=-1){
system.out.println(new   string(c));
}

这里的byte数组有缓冲的作用
发表于:2007-01-22 13:32:547楼 得分:0
to   楼上的,我是要返回字节数组呀!   你的不是我所需要的.
发表于:2007-01-22 13:35:328楼 得分:0
我是要这样的功能:  
中间的代码谁会写呀??
public   static   byte[]   getbytesfromis(inputstream   is){
    ...   //谁帮忙写一下这里的代码?
}
发表于:2007-01-22 13:42:419楼 得分:15
fileinputstream.available()
发表于:2007-01-22 13:43:4310楼 得分:0
原来要读到一个数组里
用楼上的定义byte数组的大小,然后read进去
发表于:2007-01-22 14:05:3011楼 得分:0
用list一个个的add,再转成数组
发表于:2007-01-22 14:54:3112楼 得分:0
原来要读到一个数组里
用楼上的定义byte数组的大小,然后read进去
================
好象还没明白我想要什么,   你给的代码一次只能10个,我要的是返回全部!  

用list一个个的add,再转成数组
==========================
我也是这样想的,好象很麻烦!
发表于:2007-01-29 15:03:4213楼 得分:0
奇怪了,这么简单的功能居然没人来回答,csdn的高手去哪了?!

自己贴出答案:
public   static   byte[]   readbytesfromis(inputstream   is)   throws   ioexception{
int   total   =   is.available();
byte[]   bs   =   new   byte[total];
is.read(bs);
return   bs;
}
发表于:2007-01-29 15:05:1314楼 得分:0
关键是available()   可以取得inputstream   的大小,大家都只会说read()
发表于:2007-01-29 17:42:2015楼 得分:15
如果inputstream里面的数据比较少,这样做简单明了,当然很好。

但是,如果inputstream里的数据很多,几百m,甚至上g,用楼主的办法的处理的话,恐怕,就会出现outofmemory错误(不信可以试试)。

另外,如果你操作的inputstream是socket的inputstream,available()方法返回仅仅是当前socket缓冲区中的字节数,不一定就是socke对端发送给你的全部数据,等你read后,inputstream还会有别的数据,那么你还需要read一次,直到available()返回0或者-1,这其实还是一个循环。

流的设计思想是处理动态的,数据个数不可预知的数据,它就像一个管道,你永远都无法知道这个管道会传来多少数据(fileinputstream是一个特例),因此,一般情况下,都是边read,边处理。
发表于:2007-01-30 09:46:4216楼 得分:0
谢谢muymuy(muy)
csdn   的java版   就是太少   muymuy(muy)   这样的人呀,问了很多问题,很少人能给好的答案.

但对于一般的情况,我只需要判断一下available()   有大小,如果不超过一定的长度我就用以上代码一次性读取了.  
所以以上代码在很多情况下也是很有用的.   太大的时候分批读取就行了.


发表于:2007-01-30 10:11:1817楼 得分:0
不检讨一下自己问的问题     还说别人不给好的答案~~~
唉     中国怎么净是这种人
发表于:2007-01-30 15:13:0418楼 得分:0
try
            {
                  inputtextfile=new   fileinputstream(path);  
                  length   =   inputtextfile.available();
                  system.out.println( "length   : "   +   length+ "kb ");
                  readhzk();
              }
            catch(ioexception   e)
            {
                  system.out.println(e);
            }
发表于:2007-01-30 15:19:3019楼 得分:0
byte   []   b=byte[1024];
fileinputstream   fis=new   fileinputstream( "file.txt ");
int   i=fis.read(b);
system.out.println(new   string(b,0,i));
发表于:2007-01-30 18:56:5220楼 得分:0
用bytearrayoutputstream           里面有个tobytearray
相关查api
发表于:2007-01-30 19:05:0221楼 得分:0
完整的如下
import   java.io.*;

public   class   pagebean   {

public   static   void   main(string[]   args)   {
try   {
bytearrayoutputstream   bos   =   new   bytearrayoutputstream();
fileinputstream   fis   =   new   fileinputstream( "c:\\test.xml ");
int   b   =   0;
while   ((b   =   fis.read())   !=   -1)   {
bos.write(b);
}
fis.close();
byte[]   t   =   bos.tobytearray();
system.out.println(new   string(t,   "utf8 "));

}   catch   (exception   e)   {
e.printstacktrace();
}

}
}
发表于:2007-01-31 09:23:0422楼 得分:0
用bytearrayoutputstream           里面有个tobytearray
=================================
这个我知道!   但我要求的是inputstream,   bytearrayoutputstream   可以直接转换成inputstream,   但inputstream不可以直接转换成   bytearrayoutputstream   !  
发表于:2007-01-31 09:27:3523楼 得分:0
不检讨一下自己问的问题     还说别人不给好的答案~~~
唉     中国怎么净是这种人
===========================
我说的是事实,好的答案我都会说谢谢的!     你看看我问的这个问题在我贴出自己研究结果之前的回复吧,根本帮不上忙!
发表于:2007-01-31 09:31:4224楼 得分:0
不好意思了
eugenedj(今是昨非)  
的回复早就提示到重心了,我没有注意,在这里要谢谢eugenedj了!


快速检索

最新资讯
热门点击