我正在研究一个java Web应用程序,其中文件将存储在数据库中.最初我们通过调用getBytes
结果集来检索DB中已有的文件:
byte[] bytes = resultSet.getBytes(1);
...
Run Code Online (Sandbox Code Playgroud)
然后DataHandler
使用明显的构造函数将此字节数组转换为a :
dataHandler=new DataHandler(bytes,"application/octet-stream");
Run Code Online (Sandbox Code Playgroud)
这很有用,直到我们开始尝试存储和检索更大的文件.将整个文件内容转储到一个字节数组中然后构建一个DataHandler
只需要太多内存.
我的直接想法是在数据库中检索数据流,getBinaryStream
并以某种方式将其InputStream
转换DataHandler
为内存有效的方式.不幸的是,似乎没有直接的方法将一个转换InputStream
成一个DataHandler
.另一个想法我一直在玩从读取数据块InputStream
,并将其写入OutputStream
的DataHandler
.但是...... 当我打电话时,我无法找到一种方法来创建一个DataHandler
返回非空的"空" ...OutputStream
getOutputStream
有没有人这样做过?我很感激你能给我的任何帮助或者正确的方向.
我正在用Java编写一个程序,它显示了一系列的课后俱乐部(EG Football,Hockey - 由用户输入).俱乐部添加到以下内容ArrayList
:
private ArrayList<Club> clubs = new ArrayList<Club>();
Run Code Online (Sandbox Code Playgroud)
通过以下方法:
public void addClub(String clubName) {
Club club = findClub(clubName);
if (club == null)
clubs.add(new Club(clubName));
}
Run Code Online (Sandbox Code Playgroud)
'Club'是一个带有构造函数的类 - 名称:
public class Club {
private String name;
public Club(String name) {
this.name = name;
}
//There are more methods in my program but don't affect my query..
}
Run Code Online (Sandbox Code Playgroud)
我的程序正在运行 - 它允许我在我的arraylist中添加一个新的Club对象,我可以查看arraylist,我可以删除任何我想要的等等.
但是,我现在想将该arrayList(俱乐部)保存到文件中,然后我希望能够稍后加载该文件并再次使用相同的arraylist.
我有两种方法(见下文),并一直试图让它工作,但没有任何帮助,任何帮助或建议将不胜感激.
保存方法(fileName由用户选择)
public void save(String fileName) throws FileNotFoundException {
String tmp = clubs.toString();
PrintWriter pw = …
Run Code Online (Sandbox Code Playgroud) 在Java中,我需要将OutputStream中的内容(我自己将数据填充到该流中)放入ByteBuffer中.如何以简单的方式做到这一点?
我有一个方法,它在启动后以异步方式运行,使用OutputStream或Writer作为参数.
它充当OutputStream或Writer的录制适配器(它是我无法更改的第三方API).
我怎么能将Log4J的内部OutputStream或Writer传递给该方法?
...因为Log4J吞下了System.out和System.err,我之前使用过.
我正在努力从NancyFX中的数据库中将byte []中的Image输出到Web输出流.我没有示例代码足够接近甚至在此时显示.我想知道是否有人解决了这个问题并且可以发布一个代码片段?我基本上只想从存储在我的数据库中的字节数组中返回image/jpeg,然后将其放到Web而不是物理文件中.
我有一个我想要写入HttpServletResponse的InputStream.这种方法由于使用byte []而花费的时间太长
InputStream is = getInputStream();
int contentLength = getContentLength();
byte[] data = new byte[contentLength];
is.read(data);
//response here is the HttpServletResponse object
response.setContentLength(contentLength);
response.write(data);
Run Code Online (Sandbox Code Playgroud)
在速度和效率方面,我想知道什么是最好的方法.
我正在尝试使用Scala中的基本Java代码从文件中读取并写入OutputStream,但是当我在Scala中使用通常的while(!= -1)时,会给出一个警告"比较Unit和Int的类型! =总是会产生真实的".
代码如下:
val file = this.cache.get(imageFileEntry).getValue().asInstanceOf[File]
response.setContentType( "image/%s".format( imageDescription.getFormat() ) )
val input = new BufferedInputStream( new FileInputStream( file ) )
val output = response.getOutputStream()
var read : Int = -1
while ( ( read = input.read ) != -1 ) {
output.write( read )
}
input.close()
output.flush()
Run Code Online (Sandbox Code Playgroud)
我应该如何从输入流写入Scala中的输出流?
我最感兴趣的是类似Scala的解决方案.
我一直在阅读InputStream,FileInputStream,ByteArrayInputStream以及它们的使用方式似乎非常清楚(输出流也是如此).
我正在努力的是理解FilterInputStream和FilterOutputStream的用法:
我试图以编程方式截取Android屏幕截图.我做了以下代码:
private void getsnap(){
try{
Process sh = Runtime.getRuntime().exec("su", null, null);
OutputStream os = sh.getOutputStream();
String filePath = this.getFilesDir().getPath().toString() + "/fileName1.jpeg";
os.write(("/system/bin/screencap -p " + filePath).getBytes("ASCII"));
os.flush();
os.close();
sh.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
java.io.IOException: write failed: EPIPE (Broken pipe)
请有人帮忙吗?我已经检查过其他帖子,但我找不到解决问题的方法.
编辑:
请注意,错误发生在行中os.write()
.
我最近一直在查看其他人编写的很多代码,并且碰巧注意到每个人都使用"printf"风格的C函数,但在学校学到的C++函数(特别是cout)似乎并不那么受欢迎.
这是一个有效的观察,是否有理由这样做?惯例?
谢谢,
[R
outputstream ×10
java ×7
inputstream ×5
android ×1
arraylist ×1
bytebuffer ×1
c++ ×1
epipe ×1
file ×1
image ×1
integration ×1
io ×1
java-ee ×1
log4j ×1
logging ×1
nancy ×1
scala ×1
servlets ×1
stream ×1
text-files ×1
writer ×1