首页 > 编程知识 正文

研究生可以读两次么(研究生只能读一次吗)

时间:2023-05-05 22:58:36 阅读:76534 作者:1352

文章目录0 .场景1 .原因2 .现象再现3 .解决方法使用String字符串保留InputStream内容使用ByteArrayOutputStream保留InputStream内容4 .总结

0 .场景

数据库中有一个blob字段,在保存数据时,必须传递相应的InputStream流,但必须在InputStream流中确定其他事项。

也就是一个InputStream 我需要用两次

公共语音测试(inputstream in ) {String sql='xxxx values )? (xxx ); preparedstatement.setobject(in; execute (; byte[] bufferOne=new byte[1024]; int len=-1; while((len=in.read ) ) bufferone )!=-1 ) xxxx ) xxxx在其他逻辑的最后一次测试中,以下in.read读作寂寞(1.原因经过实际测试,InputStream无法读两次。 具体原因是在读取InputStream的时候,其实内部是有个指针,它指示每次读取之后下一次要读取的起始位置,无奈的路灯第一次读完的时候,指针已经指到最后了,无奈的路灯再次读取的时候,自然是读不到数据的2 .现象再现

公共类demo _ inputstream { publicstaticvoidmain (string [ ] args ) throws exception (inputstream is=demo _ inputstreaation ) int len=-1; wile((len=is.read ) ) buffer )!=-1 ) system.out.println (新字符串(buffer,0,len ) ); (system.out.println (-------- ); byte[] buffer2=new byte[1024]; len=-1; while((len=is.read ) ) buffer2)!=-1 ) system.out.println (新字符串) buffer 2,0,len ) ); (} is.close ); }

3 .解决方案使用String字符串保存InputStream内容的publicclasscorrectone _ inputstream { publicstaticvoidmain (string [ ] args ) } throws excctream //builder是保持读取数据的stringbuilder builder=new stringbuilder (; byte[] buffer=new byte[1024]; int len=-1; wile((len=is.read ) ) buffer )!=-1 ) builder.append (新字符串) buffer,0,len ) ); (system.out.println(-----如果您是第一次需要InputStream,请创建----------- )。 inputstreamisone=newbytearrayinputstream (builder.tostring ().getBytes ) ); //测试新InputStream中是否存在数据byte[] bufferOne=new byte[1024]的len=-1; wile((len=isone.read ) ) bufferone )!=-1 ) system.out.println (新字符串(buffer one,0,len ) ); ) system.out.println(-----2如果第二次需要InputStream,请再创建一个--------'; inputstreamistwo=newbytearrayinputstream (builder.tostring ().getBytes ) ); //测试新InputStream中是否存在数据byte[] bufferTwo=new byte[1024]的len=-1; while((len=istwo.read ) ) buffertwo )!=-1 ) system.out.println (新字符串) buffertwo,0,len ) ); (} is.close ); isOne.close (; isTwo.close (; }

使用ByteArrayOutputStream维护InputStream内容的publicclasscorrecttwo _ inputstream { publicstaticvoidmain (字符串[ ] Args ) ) ) ) ) ) 65 throws exception { inputstream is=correct two _ inputstream.class.getresourceasstream (' ) bytearrayoutputstreambytearrayout=newbytearrayoutputstream (int len; byte[] buffer=new byte[1024]; wile((len=is.read ) ) buffer )!=-1 ) bytearrayout.write(buffer,0,len ); }重建system.out.println ((inputstream ); inputstreamistwo=newbytearrayinputstream (bytearray out.to bytearray (); //在新的InputStream中输入数据byte[] bufferTwo=new byte[1024]; len=-1; while((len=istwo.read ) ) buffertwo )!=-1 ) system.out.println (新字符串) buffertwo,0,len ) ); (} is.close ); isTwo.close (; }

总的来说,就是记录下来数据,需要inputStream 重新构建一个源代码: https://gitee.com/LG old/learning/tree/dev/src/main/Java/com /壮美的鲜花/learnining

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。