Tag:

在System.java源中,标准输入,输出和错误流被声明为final并初始化为null?

public final static InputStream in = null; public final static PrintStream out = null; public final static PrintStream err = null; 但正如我们所知,这些流默认连接到控制台并已打开。 System类setIn(),setOut和setErr()中还有一些方法可以重定向流。 当它们被声明为final并设置为初始化值null时,这有什么可能吗? 我编译了以下代码,在调用println()时设置断点并使用netbeans进行调试。 我的目标是通过步入源来确定何时将变量System.in初始化为标准输出。 但似乎输出流输出已经在调用main方法时初始化。 public static void main(String[] args) { System.out.println(“foo”); }

在Java中读取属性文件时出现NullPointerException

我使用以下代码来读取属性文件: Properties pro = new Properties(); InputStream is = Thread.currentThread().getContextClassLoader(). getResourceAsStream(“resources.properties”); pro.load(is); 当我执行代码时,我收到以下错误: Exception in thread “main” java.lang.NullPointerException at java.util.Properties$LineReader.readLine(Properties.java:418) at java.util.Properties.load0(Properties.java:337) at java.util.Properties.load(Properties.java:325) at com.ibm.rqm.integration.RQMUrlUtility.RQMRestClient.getResource(RQMRestClient.java:66) at com.ibm.rqm.integration.RQMUrlUtility.RQMRestClient.main(RQMRestClient.java:50) 为什么我得到NullPointerException ? 我应该在哪里保存resources.properties文件?

Android:“意外的流结束”exception下载大文件

我正在构建一个Android应用程序,我需要从一个大小为33 MB的URL下载一个文件。 这里的下载任务: try { int MAX_BUFFER_SIZE = 4096; URL mUrl = new URL(params[0]); HttpURLConnection connection = (HttpURLConnection) mUrl.openConnection(); connection.setRequestMethod(“GET”); long length = connection.getContentLength(), downloaded = 0; int read; byte [] buffer = new byte[(((int)length) > MAX_BUFFER_SIZE) ? MAX_BUFFER_SIZE : (int)length]; String filename = getFilename(mUrl); File file = new File (SDCARD_ROOT); if (!file.exists() || !file.isDirectory()){ […]

使用Runtime.exec()生成的进程的高效执行和输出流重定向

我有一个脚本,它执行多次程序,为STDERR和STDOUT产生大约350行输出。 现在,我需要在Java中执行脚本,从而将输出流打印到其原始目标。 所以,基本上,我从Java类中执行脚本,维护用户的原始行为。 我这样做的方式受到了诸如从java Runtime.exec读取流的建议的启发,并且在function上,工作正常。 Process p = Runtime.getRuntime().exec(cmdarray); new Thread(new ProcessInputStreamHandler(p.getInputStream(), System.out)).start(); new Thread(new ProcessInputStreamHandler(p.getErrorStream(), System.err)).start(); return p.waitFor(); 而ProcessInputStreamHandler类: class ProcessInputStreamHandler implements Runnable { private BufferedReader in_reader; private PrintStream out_stream; public ProcessInputStreamHandler(final InputStream in_stream, final PrintStream out_stream) { this.in_reader = new BufferedReader(new InputStreamReader(in_stream)); this.out_stream = out_stream; } @Override public void run() { String line; […]

从JAR加载为InputStream?

是否有一个ClassLoader实现,我可以用来从InputStream加载类? 我正在尝试将具有InputStream的JAR加载到新的ClassLoader中。

从InputStream解压缩文件并返回另一个InputStream

我正在尝试编写一个函数,它将接受带有压缩文件数据的InputStream ,并返回另一个带有解压缩数据的InputStream 。 压缩文件只包含一个文件,因此不需要创建目录等… 我试着看看ZipInputStream和其他人,但我对Java中的这么多不同类型的ZipInputStream到困惑。

Java大文件磁盘IO性能

我的硬盘上有两个(每个2GB)文件,想要将它们相互比较: 使用Windows资源管理器复制原始文件大约需要。 2-4分钟(即读写 – 在同一物理和逻辑磁盘上)。 使用java.io.FileInputStream读取两次并在每个字节的字节上比较字节数组需要20多分钟。 java.io.BufferedInputStream缓冲区为64kb,文件以块的forms读取然后进行比较。 比较完成是一个紧凑的循环之类 int numRead = Math.min(numRead[0], numRead[1]); for (int k = 0; k < numRead; k++) { if (buffer[1][k] != buffer[0][k]) { return buffer[0][k] – buffer[1][k]; } } 我该怎么做才能加快速度呢? NIO应该比普通的流更快吗? Java无法使用DMA / SATA技术,而是执行一些缓慢的OS-API调用吗? 编辑: 谢谢你的回答。 我做了一些基于它们的实验。 正如安德烈亚斯所示 流或nio方法没有太大差别。 更重要的是正确的缓冲区大小。 我的实validation实了这一点。 由于文件是以大块读取的,所以即使是额外的缓冲区( BufferedInputStream )也不会提供任何内容。 优化比较是可能的,并且我通过32次展开获得了最佳结果,但与磁盘读取相比,花费的时间比较小,因此加速很小。 看起来我无能为力;-(

如何将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 … 有没有人这样做过? 我很感激你能给我的任何帮助或者正确的方向。

在Java中关闭输入流

我在try / catch块中有以下代码段 InputStream inputstream = conn.getInputStream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputstreamreader); 我的问题是,当我必须在finally块中关闭这些流时,是否必须关闭所有3个流,或者只是关闭befferedreader将关闭所有其他流?

Java中的流和读者有什么区别?

今天我得到了这个问题,我认为我的回答非常糟糕。 我说流是一种流动的数据,而读者是一种从中读取的技术,即静态数据。 我知道这是一个糟糕的答案,所以请用Java中的示例向我提供这两者之间的明显差异和定义。 谢谢。