有人可以解释我的区别OutputStream
和Writer
?我应该使用哪些课程?
如何创建OutputStream
实现并将内容写入其中的类?
例如,以下打印方法是错误的,不会编译.有哪些选择或更好的技术?
public class FooBarPrinter{
private OutputStream o;
public FooBarPrinter(OutputStream o){
this.o=o;
}
public void print(String s){
o.write(s);
}
}
Run Code Online (Sandbox Code Playgroud) 来自OutputStream.flush()
docs.
为什么它在doc中说明了flush方法OutputStream
在解释它实际上做了什么后什么也没做?很混乱.
我有一个需要读取和写入文本文件的应用程序.我有阅读,但我没有写作.我的想法是,当我单击屏幕上的保存按钮时,它会将已放入textviews的所有信息保存到数组中,并将数组的每个段写入文本文件.这是我写作部分的代码:
public class AddOrModify extends Activity {
private Button Savebtn;
private Button Cancelbtn;
private EditText NameofRoute;
private EditText Address1;
private EditText City1;
private EditText State1;
private EditText Zip1;
private EditText Address2;
private EditText City2;
private EditText State2;
private EditText zip2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_or_modify);
Savebtn = (Button)findViewById(R.id.savebtn);
Savebtn.setOnClickListener(new btnlistenersave());
Cancelbtn = (Button)findViewById(R.id.cancelbtn);
Cancelbtn.setOnClickListener(new btnlistenercancel());
}
private class btnlistenersave implements View.OnClickListener{
public void onClick(View v) {
NameofRoute = (EditText)findViewById(R.id.NameofRoute);
Address1 = (EditText)findViewById(R.id.editAddress1);
City1 = (EditText)findViewById(R.id.City1);
State1= (EditText)findViewById(R.id.State1); …
Run Code Online (Sandbox Code Playgroud) 我试图使用以下代码:我得到一个损坏的zip文件.为什么?文件名似乎没问题.也许他们不是相对的名字,这就是问题所在?
private void trySharpZipLib(ArrayList filesToInclude)
{
// Response header
Response.Clear();
Response.ClearHeaders();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.StatusCode = 200; // http://community.icsharpcode.net/forums/p/6946/20138.aspx
long zipSize = calculateZipSize(filesToInclude);
string contentValue =
string.Format("attachment; filename=moshe.zip;"
); // + " size={0}", zipSize);
Response.ContentType = "application/octet-stream"; //"application/zip";
Response.AddHeader("Content-Disposition", contentValue);
Response.Flush();
using (ZipOutputStream zipOutputStream = new ZipOutputStream(Response.OutputStream) )
{
zipOutputStream.SetLevel(0);
foreach (string f in filesToInclude)
{
string filename = Path.Combine(Server.MapPath("."), f);
using (FileStream fs = File.OpenRead(filename))
{
ZipEntry entry =
new ZipEntry(ZipEntry.CleanName(filename))
{
DateTime = File.GetCreationTime(filename),
CompressionMethod = CompressionMethod.Stored,
Size = fs.Length …
Run Code Online (Sandbox Code Playgroud) 由于ByteArrayOutputStream
只是写入内存,IOException
因此永远不会发生.但是,由于OutputStream
接口的约定,所有流操作都IOException
在其throws
子句中定义.
"处理"这种从未发生过的正确方法是什么IOException
?只需将操作包装在空try-catch
块中?
或者是否存在ByteArrayOutputStream
可能抛出异常的实际情况?
(另请参阅:如何以安全可读的方式处理我知道永远不会抛出的IOException?)
编辑
正如Jon指出的那样,ByteArrayOutputStream
并没有声明它定义throws
的write
方法的子句- 但是,它继承write(byte[])
了OutputStream
,并且确实抛出IOEXception
(非常奇怪,BAOS
不会覆盖此方法,因为它可以替换超类版本 -一次写一个字节 - arraycopy
调用效率更高
java exception outputstream ioexception bytearrayoutputstream
我目前正在为一个项目编写天真的网络代码,并且一位伙伴暗示我有可能当我以一种迭代的方式从服务器向所有客户端发送信息包时,当其中一个客户端没有正确响应时,我可能会遇到严重的延迟.
他因拖钓而闻名,所以当我实现一个现在负责将数据发送到客户端的辅助线程时,我有点怀疑,它有一个队列,服务器只是简单地添加了包,然后被线程读取以发送数据.
在考虑它之后我现在遇到的问题是天气与否,Java Socket的OutputStream实际上将他想要发送的东西排队,因此事先不需要队列.只有当客户端没有收到来自客户端的已收到发送对象的响应时,才会出现发生严重问题的可能性.
谢谢.
我正处于创建输出拦截器的阶段,我从SOAP消息中获取了一个OuputStream.但是如何在将SOAP信封发送到端点之前修改它呢?我想删除一些xml元素.
我正在尝试编写一个函数,它接受File对象,偏移量和字节数组参数,并将该字节数组写入Java中的File对象.
所以函数看起来像
public void write(File file, long offset, byte[] data)
Run Code Online (Sandbox Code Playgroud)
但问题是offset参数是long类型,所以我不能使用OutputStream的write()函数,它将整数作为偏移量.
与跳过(长)的InputStream不同,似乎OutputStream无法跳过文件的第一个字节.
有没有好办法解决这个问题?
谢谢.
我想写一个socket.从阅读网络IO,在我看来,写入它的最佳方式是做这样的事情:
OutputStream outs=null;
BufferedWriter out=null;
out =
new BufferedWriter(
new OutputStreamWriter(new BufferedOutputStream(outs),"UTF-8"));
Run Code Online (Sandbox Code Playgroud)
在BufferedWriter
将缓冲输入到OutputStreamWriter
这是推荐的,因为它防止了从作家启动每个字符的编码器.
然后,BufferedOutputStream
将缓冲来自的字节,Writer
以避免一次将一个字节放到网络上.
它看起来有点像矫枉过正,但它似乎都有帮助吗?感谢任何帮助..
编辑:从javadoc上OutputStreamWriter
:
每次调用write()方法都会导致在给定字符上调用编码转换器.生成的字节在写入底层输出流之前累积在缓冲区中.可以指定此缓冲区的大小,但默认情况下,它足够大,可用于大多数用途.请注意,传递给write()方法的字符不会被缓冲.
为了获得最高效率,请考虑在BufferedWriter中包装OutputStreamWriter,以避免频繁的转换器调用.例如:
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
Run Code Online (Sandbox Code Playgroud) outputstream ×10
java ×8
io ×2
sockets ×2
android ×1
asp.net ×1
blocking ×1
cxf ×1
exception ×1
inputstream ×1
interceptor ×1
ioexception ×1
networking ×1
real-time ×1
sharpziplib ×1
string ×1
textview ×1
zip ×1