Tag: outputstream

标准Java中的FtpOutputStream或类似内容

是否有任何可能的方法使用某种OutputStream将文件写入FTP目录而不必先写入本地文件? 我发现了一些实现这一目标的第三方库,但我想知道是否有一些java“标准”类使得它成为可能,我的意思是,某些类被打包到标准Java API中。 谢谢!!

ObjectOutputStream永远挂起

我有一个使用SSLSocket连接到服务器的客户端。 接下来,我尝试使用ObjectOutputStream oos = new ObjectOutputStream(sslsocket.getOutputStream());创建一个OOS ObjectOutputStream oos = new ObjectOutputStream(sslsocket.getOutputStream()); 如果一切都在服务器端运行良好,这很好。 但是,我想在客户端尝试创建ObjectOutputStream,但如果在60秒内没有发生,请记录错误并继续处理。 我没有看到任何超时选项。 有关如何做到这一点的任何例子? SSLSocket sslsocket; try { System.setProperty(“javax.net.ssl.trustStore”, ); System.setProperty(“javax.net.ssl.trustStorePassword”, ); SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); sslsocket = (SSLSocket) sslsocketfactory.createSocket(InetAddress.getLocalHost(), ); } catch (Throwable e) { logger.logError(e.getMessage()); return null; } // This is where it hangs forever ObjectOutputStream oos = new ObjectOutputStream(sslsocket.getOutputStream()); oos.flush(); […]

读取12 MB的巨大文件时出现问题(java.lang.OutOfMemoryError)

我需要打开一个12兆字节的文件,但实际上我正在创建一个12834566字节的缓冲区,因为该文件的大小是12MB,我正在为Android移动系统开发这个应用程序。 然后,我想我必须用1024 KB的块读取而不是一块12 MB的块,有一个for,但我不知道该怎么做,我需要一些帮助。 这是我的实际代码: File f = new File(getCacheDir()+”/berlin.mp3″); if (!f.exists()) try { InputStream is = getAssets().open(“berlin.mp3”); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); FileOutputStream fos = new FileOutputStream(f); fos.write(buffer); fos.close(); } catch (Exception e) { throw new RuntimeException(e); } 请问,有人能告诉我在这段代码中我需要更改的内容是读取1024 KB的块而不是一块12 MB的块吗? 谢谢!

Play / Akka与Java OutputStreams集成

我在写一个游戏! 暴露REST API的应用程序,允许用户生成PDF报告。 我受到使用旧Java API进行实际报告生成的要求的限制。 该库有一个方法generate(OutputStream out, …) ,即它需要一个java.io.OutputStream来编写生成的报告。 我的问题是将它与Play / Akka集成以提供Chunked Encoding中的内容。 为此,我需要创建一个Enumerator[Array[Byte]] ,它以某种方式包含Java库中的OutputStream 。 我提出了一个使用PipedOutputSteam / PipedInputStream二人组的工作解决方案,使用Enumerator.fromStream将库的输出传递给Enumerator.fromStream 。 我想知道是否有更好的方法来实现这一点,但我似乎无法在Akka或Play中找到一个明确的例子! 将枚举器与OutputStream集成的文档。 我知道Java库的阻塞IO是设计更好的解决方案的限制因素,但也许有一种更简洁的方法来做到这一点。 有什么想法吗? 跟进 假设我使用Enumerator.outputStream ,那么将实际报告生成移动到另一个actor(可能在另一台机器上)的安全方法是什么? 例如,我猜测发送OutputStream是不安全的(并且只能在本地工作)。

如何将OutputStream中的数据放入ByteBuffer?

在Java中,我需要将OutputStream中的内容(我自己将数据填充到该流中)放入ByteBuffer中。 如何以简单的方式做到这一点?

Java将InputStream的一部分复制到OutputStream

我有一个3236000字节的文件,我想从开始读取2936000并写入OutputStream InputStream is = new FileInputStream(file1); OutputStream os = new FileOutputStream(file2); AFunctionToCopy(is,os,0,2936000); /* a function or sourcecode to write input stream 0to2936000 bytes */ 我可以逐字节地读写,但是从缓冲读取开始慢(我认为)如何复制它?

通过JNI接口共享输出流

我正在编写一个通过JNI接口使用C ++库的Java应用程序。 C ++库创建了Foo类型的对象,它们通过JNI传递给Java。 假设库具有输出function void Foo::print(std::ostream &os) 我有一个Java OutputStream out 。 如何从Java调用Foo::print以使输出显示out ? 有没有办法将OutputStream强制转换为JNI层中的std::ostream ? 我可以在缓冲区中捕获JNI层的输出,然后将其复制到out吗?

如何在JAVA中保存来自HTTPSurl的文件?

我正在尝试使用outputstream从URL保存文件。 该URL由https保护。 所以当我尝试获取以下文件时出现了一些错误 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source) at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) at java.net.URL.openStream(Unknown Source) Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source) […]

Saxon XSLT转换:如何在转换期间失败时关闭输出流

我想用多个输出文件进行XSLT转换。 因为我使用了“xsl:result-document”。 转换失败时,应删除所有输出文件。 但是如果由“xsl:result-document”创建的文档生成失败,我的程序将无法再删除此文档。 我认为原因是,“xsl:result-document”创建了一个不同的OutputStream。 有谁知道如何关闭所有输出流? 编辑:我使用Saxon 9.5进行转换。 请参阅下面的源代码: public void simpleTransform(String sourcePath, String xsltPath, String outputPath) { String resultDir=outputPath+”/filename.html”; TransformerFactory tFactory = TransformerFactory.newInstance(); StreamSource ss = new StreamSource(new File(xsltPath)); StreamResult sr = new StreamResult(new File(resultDir)); Transformer transformer = tFactory.newTransformer(ss); try { transformer.transform(new StreamSource(new File(sourcePath)), sr); System.out.println(“Transformation finished!”); } catch (TransformerException te) { try { […]

是否可以非常频繁地调用ObjectOutputStream上的reset()?

我读到的地方让我不确定,并寻找另一种方式。 调用reset()过于频繁会对网络造成压力,还是不必要? 我在ObjectOutputStream上使用TCP发送一个对象。 在再次写入之前,对象值会更改。 现在相同的Object但包含不同的值,没有reset()它重新发送在它之前发送的缓存对象的引用,读取后没有任何更改。 由于这种压力,我不确定使用reset()是否是一个好主意。 我应该寻找另一种方式吗? 示例代码如下: Socket socket = new Socket(ip, port); BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream()); ObjectOutputStream oos = new ObjectOutputStream(bos); while(true){ oos.writeObject(object); oos.flush(); oos.reset(); object.x++; }