我有以下从缓冲读取器读取的示例:
while ((inputLine = input.readLine()) != null) {
System.out.println("I got a message from a client: " + inputLine);
}
Run Code Online (Sandbox Code Playgroud)
println只要缓冲读卡器中出现某些内容(input在本例中),就会执行循环中的代码.在我的例子中,如果客户端应用程序向套接字写入内容,则将执行循环中的代码(在服务器应用程序中).
但我不明白它是如何工作的.inputLine = input.readLine()等待直到缓冲的阅读器中出现某些内容,当出现某些内容时,它会返回true并执行循环中的代码.但什么时候null可以退货.
还有一个问题.上面的代码取自一个方法,throws Exception我在Thread的run方法中使用了这个代码.而当我尝试在编译器抱怨throws Exception之前放置run:重写方法不会抛出异常.没有throws exception我有来自编译器的另一个抱怨:未报告的异常.那么,我该怎么办?
我使用以下代码来读取消息对象的主体:
Object content = _message.getContent();
String body = null;
if (content instanceof String) {
body = (String) content;
} else if (content instanceof Multipart) {
Multipart multipart = (Multipart) content;
BodyPart part = multipart.getBodyPart(0);
body = (String) part.getContent();
}
Run Code Online (Sandbox Code Playgroud)
当内容是多部分时,一切正常,但是当内容只是text/plain时,我得到以下异常(在第1行的getContent()调用中已经!):
13.01.2011 17:22:23 org.zkoss.zk.ui.impl.UiEngineImpl handleError:1253
SCHWERWIEGEND: >>org.zkoss.zk.ui.UiException: java.io.IOException
java.io.IOException
at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:108)
at com.sun.mail.handlers.text_plain.getContent(text_plain.java:90)
at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:775)
at javax.activation.DataHandler.getContent(DataHandler.java:522)
at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1396)
Run Code Online (Sandbox Code Playgroud)
我还尝试了JavaMail FAQ中显示的代码:http://www.oracle.com/technetwork/java/faq-135477.html#mainbody
结果相同.
通过在IMAPFolder实例上调用getMessages(n)来检索消息.文件夹实例来自IMAPStore对象.
我完全没有想法会出现什么问题......有没有人有想法?
我正在调试一个定期引发的测试IOException,注意到一个文件因为被另一个进程使用而无法删除.我怀疑这个过程确实是我的测试工具,并且进程中的其他一些线程在我预期时没有处理它的文件资源.
有没有一个工具可以用来确定哪个线程阻挡了阻碍锁?如果我可以识别线程,那么我可以检查它的调用堆栈,并至少尝试确定资源尚未处理的原因.该SOS调试工具看起来很有希望,但我不认为这会从我的调查中删除的猜测相当数量的任何特征.
一种想法是识别本机OS线程ID,然后可以通过SOS将其映射到托管线程ID.我将如何完成前者?
我正在编写一个简单的程序,使用a读取和处理文件内容BufferedReader.
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
System.out.println("Enter the file name to read");
String fileName = br.readLine();
br.close();
// Process file contents
br = new BufferedReader( new InputStreamReader(System.in) );
System.out.println("Enter another file name to read");
fileName = br.readLine();
br.close();
Run Code Online (Sandbox Code Playgroud)
但是当我调用br.readLine()另一个文件名时,我得到以下异常:
线程"main"中的异常java.io.IOException:Stream已关闭
我不明白如何System.in关闭流.我犯了什么错误,如何解决这个问题?
我正在JBossAS 7.1.1上构建一个JBoss Application Server模块.在尝试修改清单文件中的类路径时,我遇到了这个错误:
12:30:53,097 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876: Starting deployment of "MyDeployableProject.war"
12:30:53,141 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."MyDeployableProject.war".STRUCTURE: org.jboss.msc.service.StartException in service jboss.deployment.unit."MyDeployableProject.war".STRUCTURE: Failed to process phase STRUCTURE of deployment "MyDeployableProject.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [classes.jar:1.6.0_31]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [classes.jar:1.6.0_31]
at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_31]
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: Failed to get manifest for deployment "/opt/server/bin/jboss-as-7.1.1.Final/standalone/deployments/MyDeployableProject.war"
at org.jboss.as.server.deployment.module.ManifestAttachmentProcessor.deploy(ManifestAttachmentProcessor.java:73) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
... 5 more
Caused by: …Run Code Online (Sandbox Code Playgroud) 例如,我有处理输入/输出流的方法:
public void doSomethingWithStreams () throws FileNotFoundException, IOException
{
OutputStream out1, out2;
InputStream in1, in2;
try{
//do something with Streams: read, write, process, etc.
}
finally{
//There I try to close connections
out1.close();
out2.close();
in1.close();
in2.close();
}
}
Run Code Online (Sandbox Code Playgroud)
方法可以抛出IOException并且它是有效的行为.但如果我在这行中有异常:
out1.close();
Run Code Online (Sandbox Code Playgroud)
其他三个Stream将不会关闭.你能推荐什么解决方案?怎么样?如何关闭所有?
我只有一个:
public void doSomethingWithStreams () throws FileNotFoundException, IOException
{
OutputStream out1, out2;
InputStream in1, in2;
try{
//do something with Streams: read, write, process, etc.
}
finally{
//There I try to close connections
try{out1.close();}
finally{
try{out2.close();} …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个非常简单的hadoop工作。它是对经典wordCount的修改,它不对单词进行计数,而是对文件中的行进行计数。我想用它来清理一堆我知道有重复项的大日志文件(每个约70GB)。每行都是一个“记录”,因此我有兴趣仅获取一次每个记录。
我知道我的代码有效,因为它可以在我使用小型普通文件运行它时执行的工作。当我使用大文件运行它时,Hadoop表现得很严格。首先,它可以在MAP阶段正常开始工作,该阶段通常可以毫无问题地达到100%。但是,在处理REDUCE时,它永远不会超过50%。它可能达到40%,然后在显示一些“设备上没有剩余空间”异常之后返回到0%:
FSError: java.io.IOException: No space left on device
Run Code Online (Sandbox Code Playgroud)
然后,它尝试再次执行减少操作,当达到40%时,它再次降低到0%,依此类推。当然,它会这样做2到3次,然后才决定结束而没有成功。
但是,此异常的问题在于,它与磁盘上的实际空间无关。磁盘空间永远不会满。不是HDFS上的总(全局)空间,也不是每个节点中的单个磁盘。我用以下方法检查fs状态:
$ hadoop dfsadmin -report > report
Run Code Online (Sandbox Code Playgroud)
该报告从未显示实际节点达到100%。实际上,没有节点能与之接近。
我在每个节点上都有大约60GB的磁盘可用,并且在具有60个数据节点的群集中运行该磁盘,这使我的总空间超过3TB。我要处理的文件只有70GB。
在Internet上查看时,我发现这可能与Hadoop在处理大量数据时创建太多文件有关。原始的wordCount代码大大减少了数据(因为单词重复很多)。70GB的文件可以减少到仅7MB的输出。但是,我期望仅减少1/3左右,或输出大约20-30GB。
Unix类型的系统每个进程最多只能有1024个打开文件:
$ ulimit -n
1024
Run Code Online (Sandbox Code Playgroud)
如果hadoop不仅能创造更多的东西,那可能是个问题。我要求系统管理员将该限制增加到65K,即现在该限制为:
$ ulimit -n
65000
Run Code Online (Sandbox Code Playgroud)
问题继续。是否可以我需要进一步增加此限制?这里还有其他事情吗?
非常感谢你的帮助!
代码在这里:
package ...;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class LineCountMR {
public static class MapperClass
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1); …Run Code Online (Sandbox Code Playgroud) 我的程序包含一个表单和七个用户控件.我正在使用MS Visual Studio 2010 C#语言.
我的程序:将.txt文件中的所有文本显示在UserControl的文本框中.
我的目标:我想检查.txt文件是否存在.如果.txt文件不存在,请创建它,以便用户可以将一些数据放入.txt文件中,然后显示在UserControl的文本框中.如果.txt文件已存在,则直接将.txt文件中的数据显示到文本框中.
我在FORM中检查文件是否存在的代码:
private void Form1_Load(object sender, EventArgs e)
{
string path1 = @"C:\Users\PK\Documents\Visual Studio 2010\ABC.txt";
if (!File.Exists(path1))
{
File.Create(path1);
}
string path2 = @"C:\Users\PK\Documents\Visual Studio 2010\DEF.txt";
if (!File.Exists(path2))
{
File.Create(path2);
}
string path3 = @"C:\Users\PK\Documents\Visual Studio 2010\GHI.txt";
if (!File.Exists(path3))
{
File.Create(path3);
}
string path4 = @"C:\Users\PK\Documents\Visual Studio 2010\JLK.txt";
if (!File.Exists(path4))
{
File.Create(path4);
}
string path5 = @"C:\Users\PK\Documents\Visual Studio 2010\MNO.txt";
if (!File.Exists(path5))
{
File.Create(path5);
}
}
Run Code Online (Sandbox Code Playgroud)
用于将文本从.txt文件读取到UserControl中的TextBox的代码:(对于剩余的6个用户控件及其文本框,这是相同的.只有.txt文件和文本框的名称相应地不同.
private void UserControl1_Load(object sender, EventArgs e) …Run Code Online (Sandbox Code Playgroud) 应用程序无法加载任何xaml.也不创建空窗口"var abc = new Window1();"
错误信息仍然相同:
PresentationFramework.dll中出现"System.IO.IOException"类型的异常,但未在用户代码中处理
附加信息:找不到资源'wvmlog.xaml'.(对于wvmlog.xaml)在InitializeComponent()上发生异常;
在另一台PC上创建这些对象时没有错误 - 因此问题不在项目设置中.
不要帮忙:
帮助:
问题出在一台装有Win 7,64位的PC上.在某些xaml窗口重命名后突然出现问题,但这些更改多次撤消,但问题仍然存在.
可能是某些操作系统损坏,或者某些wpf/.net缓存?
为什么wpf/.net在没有错误编译的项目上显示这样的错误 - 所以编译器知道这些资源确实存在?
任何帮助表示赞赏.
虽然编码Java有这个问题:file.createNewFile()抛出IOException"没有这样的文件或目录".检查出其他答案,但似乎没有任何帮助.有任何想法吗?..