Tag: java输入

Java方法返回文件数据,输入流或字节数组,哪个更好?

我需要加载许多文件路径小于1MB的二进制文件,如下所示:loadFile(String path); 它应该返回byte []还是Inputstream? 我认为返回byte []将占用大量内存,我不知道如何返回ByteArrayInputStream或事件FileInputream,因为我不知道何时关闭InputStream。 谢谢。

包含两个文件的单个输入流。 我想分割这些文件

在java中,我有一个包含多个文件的输入inputstream (可能是sequenceinputstream )。 我想用java分隔这些文件。 java中有没有可用的解决方案?

PrintWriter是BufferedWriter吗?

基本上我想知道PrintWriter是否是Buffered Writer。 我见过类似PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));代码PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); 但是从这个javadoc : 参数:file – 用作此writer的目标的文件。 如果该文件存在,那么它将被截断为零大小; 否则,将创建一个新文件。 输出将写入文件并进行缓冲。 一句话:我认为PrintWriter是缓冲的,因为javadoc“有点提到它”(参见引用),如果我不刷新PrintWriter它就不会打印出来。 你确认我的论文了吗? 在这种情况下,为什么有一些代码如下: PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); 遗留代码? 提前致谢。

如何创建受约束的InputStream以仅读取文件的一部分?

我想创建一个限制在文件中某个字节范围的InputStream,例如从位置0到100的字节。这样客户端代码应该在达到第100个字节时看到EOF。

Java InputStream.read(byte ,int,int)方法,如何阻塞,直到读取了确切的字节数

我正在编写一个简单的客户端/服务器网络应用程序,通过TCP套接字发送和接收固定大小的消息。 到目前为止,我一直在使用Socket类的getInputStream()和getOutputStream()方法来获取流,然后调用InputStream类的read(byte[] b, int off, int len)方法来读取60每次字节数(这是消息的大小)。 后来,我阅读了该方法的Javadoc: public int read(byte [] b,int off,int len)抛出IOException 将输入流中最多 len个字节的数据读入一个字节数组。 尝试读取len个字节, 但可以读取较小的数字 。 实际读取的字节数以整数forms返回。 我想知道是否有任何Java“开箱即用”的解决方案要阻止,直到len字节被读取,必要时永远等待。 我显然可以创建一个简单的循环,但我觉得我正在重新发明轮子。 你能建议我一个干净的Java感知解决方案吗?

有没有办法确定输入流是否是readOnly?

我在想一些像 File file =new File(inputStream) // not possible though. file.canWrite File file =new File(inputStream) // not possible though. file.canWrite , 但我似乎无法找到一个解决方案将输入流转换为文件,而无需将其写入别处。 谢谢!

复制InputStream,如果大小超过限制则中止操作

我尝试将InputStream复制到File,如果InputStream的大小大于1MB,则中止复制。 在Java7中,我编写了如下代码: public void copy(InputStream input, Path target) { OutputStream out = Files.newOutputStream(target, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); boolean isExceed = false; try { long nread = 0L; byte[] buf = new byte[BUFFER_SIZE]; int n; while ((n = input.read(buf)) > 0) { out.write(buf, 0, n); nread += n; if (nread > 1024 * 1024) {// Exceed 1 MB […]

InputStream.getResourceAsStream()给出空指针exception

行persistenceProperties.load(is); 在以下方法中抛出nullpointerexception 。 我该如何解决这个错误? public void setUpPersistence(){ final Properties persistenceProperties = new Properties(); InputStream is = null; try { is = getClass().getClassLoader().getResourceAsStream(“src/test/samples/persistence.properties”); persistenceProperties.load(is); }catch (IOException ignored) {} finally { if (is != null) {try {is.close();} catch (IOException ignored) {}} } entityManagerFactory = Persistence.createEntityManagerFactory( “persistence.xml”, persistenceProperties); } 我试图通过将包含该方法的类移动到应用程序结构中的各个其他位置,并通过以下方式更改错误之前的代码行来尝试此操作: is = getClass().getClassLoader().getResourceAsStream(“persistence.properties”); is = getClass().getClassLoader().getResourceAsStream(“/persistence.properties”); is = […]

如何从InputStream获取SelectableChannel?

我想从超时的java.io.InputStream中读取。 显然,正确的方法是使用java.nio.channels.SelectableChannel和java.nio.channels.Selector。 不幸的是,目前还不清楚如何从InputStream转到SelectableChannel。 InputStream来自非传统来源 – http://java.sun.com/products/javacomm/reference/api/javax/comm/CommPort.html#getInputStream()

如何将InputStream转换为DataHandler?

我正在研究一个java Web应用程序,其中文件将存储在数据库中。 最初我们通过在结果集上调用getBytes来检索数据库中已有的文件: byte[] bytes = resultSet.getBytes(1); … 然后使用明显的构造函数将此字节数组转换为DataHandler : dataHandler=new DataHandler(bytes,”application/octet-stream”); 这很有用,直到我们开始尝试存储和检索更大的文件。 将整个文件内容转储到字节数组中,然后构建一个DataHandler只需要太多内存。 我的直接想法是使用getBinaryStream检索数据库中的数据流,并以某种方式将该InputStream以内存效率的方式转换为DataHandler 。 不幸的是,似乎并没有将InputStream转换为DataHandler的直接方法。 我一直在玩的另一个想法是从InputStream读取数据块并将它们写入DataHandler的OutputStream 。 但是……当我调用getOutputStream时,我找不到创建“空” DataHandler的方法,该DataHandler返回非null的OutputStream … 有没有人这样做过? 我很感激你能给我的任何帮助或者正确的方向。