标签: outputstream

用Java将二进制下载文件写入磁盘

我有一个软件允许在javascript文件(.js)中编写附加组件,允许使用Java函数(我不知道这是否常见,我以前从未在javascript文件中看过java调用)

我需要从网络服务器下载二进制文件并将其写入硬盘.我尝试了以下代码:

baseencoder = new org.apache.commons.codec.binary.Base64();
url = new java.net.URL("https://server/file.tgz");

urlConnect = url.openConnection();
urlConnect.setDoInput(true);
urlConnect.setDoOutput(true);
urlConnect.setRequestProperty("authorization","Basic "+ java.lang.String(baseencoder.encodeBase64(java.lang.String( username + ":" + password ).getBytes())));
urlConnect.setRequestProperty("content-type","application/x-www-form-urlencoded");

is = new java.io.DataInputStream(urlConnect.getInputStream());
fstream = new FileWriter("C:\\tmp\\test.tgz");
out = new BufferedWriter(fstream);
while((data = is.read()) != -1){
    out.write(data);
}

out.close();
is.close();
Run Code Online (Sandbox Code Playgroud)

生成的文件不再是有效的gzip存档.如果我犯了一个很大的错误,我很抱歉,但我不是程序员,也不太了解Java.

java inputstream outputstream

7
推荐指数
2
解决办法
3万
查看次数

Java servlet和IO:创建文件而不保存到磁盘并将其发送给用户

我希望可以帮助我解决文件创建/响应问题.我知道如何创建和保存文件.我知道如何通过ServletOutputStream将该文件发送回用户.

但我需要的是创建一个文件,而不是将其保存在磁盘上,然后通过ServletOutputStream发送该文件.

上面的代码解释了我所拥有的部分.任何帮助赞赏.提前致谢.

// This Creates a file
//
String   text = "These days run away like horses over the hill";
File     file = new File("MyFile.txt");
Writer writer = new BufferedWriter(new FileWriter(file));
writer.write(text);
writer.close();

// Missing link goes here
//

// This sends file to browser
//
InputStream inputStream = null;
inputStream = new FileInputStream("C:\\MyFile.txt");

byte[] buffer = new byte[8192];
ByteArrayOutputStream baos = new ByteArrayOutputStream();

int bytesRead;
while (  (bytesRead = inputStream.read(buffer)) != -1)
   baos.write(buffer, 0, bytesRead);

response.setContentType("text/html");
response.addHeader("Content-Disposition", "attachment; …
Run Code Online (Sandbox Code Playgroud)

java io servlets outputstream response

7
推荐指数
1
解决办法
2万
查看次数

使用HttpServletResponse创建UTF-8文件

我正在尝试使用HttpServletResponse(HttpServlet)创建一个UTF-8文件"myFile.aaa".我之所以需要它是UTF-8,是因为它可能包含特殊的不可打印字符.

但是,下面的代码似乎创建了ANSI编码的文件.至少这是Notepad ++所说的,以及从这个文件中读取字符的内容.我究竟做错了什么?

谢谢

public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
    {
        res.setHeader("Content-Type", "application/octet-stream; charset=UTF-8");
        res.setHeader("Content-Disposition","attachment;filename=myFile.aaa");
        res.setCharacterEncoding("UTF-8");
        ServletOutputStream os = res.getOutputStream();
        os.print("Hello World");
        os.flush();
        os.close();
    }
Run Code Online (Sandbox Code Playgroud)

servlets outputstream utf-8 character-encoding

7
推荐指数
2
解决办法
2万
查看次数

我可以在Java中复制或拦截输出流吗?

我想拦截标准输出流,然后将内容复制到另一个流,但我也希望保持标准输出流像原始.我可以用Java实现吗?

java outputstream

7
推荐指数
1
解决办法
4086
查看次数

如何在Java中将数组写入outputStream

我想通过Socket发送多个随机值.我认为数组是发送它们的最佳方式.但是我不知道如何将数组写入Socket outputStream?

我的java类

public class NodeCommunicator {

    public static void main(String[] args) {
        try {
            Socket nodejs = new Socket("localhost", 8181);

            Random randomGenerator = new Random();
            for (int idx = 1; idx <= 1000; ++idx){
                Thread.sleep(500);
                int randomInt = randomGenerator.nextInt(35);
                sendMessage(nodejs, randomInt + " ");
                System.out.println(randomInt);
            }

            while(true){
                Thread.sleep(1000);
            }
        } catch (Exception e) {
            System.out.println("Connection terminated..Closing Java Client");
            System.out.println("Error :- "+e);
        }
    }

    public static void sendMessage(Socket s, String message) throws IOException {
        s.getOutputStream().write(message.getBytes("UTF-8"));
        s.getOutputStream().flush();
    }

}
Run Code Online (Sandbox Code Playgroud)

java sockets outputstream

7
推荐指数
1
解决办法
2万
查看次数

等待进程和读取流之间的并发问题?

我用a ProcessBuilder来运行进程.我通过提交在线程池(Executors.newCachedThreadPool())中处理它们的相应runnable来处理输入/输出流.
我得到了结果但是偶尔我什么也得不到.
例如,如果我这样做:cmd \C dir对于流程构建器,我得到了dir返回的结果,但有时我没有得到任何东西(尽管结果似乎从处理它的runnable中恢复process.getInputStream).
我该怎么调试呢?它间歇地出现了.使用相同的代码,我没有遇到任何问题new Thread(runnable).start().它在我切换到线程池后开始发生.

更新:
我想我找到了一些东西:
我在以下方面做了以下事情Runnable:

 try {  
    while ( (line = br.readLine()) != null) {  
            pw.println(line);  
                sb.append(line);   
    }  
    System.out.println("Finished reading "+sb.length());  
} catch (IOException e) {             
    e.printStackTrace();  
}  
finally{  
   pw.flush();     
  try{
    isr.close();  
  }catch(Exception e){}  
}
Run Code Online (Sandbox Code Playgroud)

在不起作用的情况下,它打印Finished reading 521.但我试图通过pw而不是得到结果sb.
pw是PrintWriter pw = PrintWriter(outputStream);`我传递给runnable

更新2:
似乎:处理输入流的runnable完成之前status = process.waitFor();返回.怎么会发生这种情况? 我在javadoc中读到:.那么这是否意味着我可以消耗I/O流 …

java multithreading outputstream executorservice processbuilder

7
推荐指数
1
解决办法
498
查看次数

swift是否有写入字节流的协议?

我在Swift书中找不到关于io的任何内容.是否有类似于Java的OutputStream或Go的Writer接口的通用协议用于写入字节流?如果您正在编写一个返回流的类,您是否需要编写自己的协议或使用Objective C协议?

要明确我要求Swift原生接口不是因为我避免使用Objective C或Cocoa,而是为了描述Swift到Swift代码的预期行为.

io outputstream swift

7
推荐指数
1
解决办法
4717
查看次数

Android Studio打开失败:创建文件时EROFS(只读文件系统)

我知道之前已经问过这个问题,但是我无法让它发挥作用.请帮忙.我添加了外部存储权限,为什么它仍然是只读的?

public class MainActivity extends Activity {

    public static final String LOGTAG="EXPLORECA";
    public static final String USERNAME="pref_username";
    public static final String VIEWIMAGE="pref_viewimages";

    private SharedPreferences settings;

    private OnSharedPreferenceChangeListener listener;
    private File file;
    private static  final String FILENAME = "jasondata";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        settings = PreferenceManager.getDefaultSharedPreferences(this);

        listener = new OnSharedPreferenceChangeListener() {

            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                                                  String key) {
                MainActivity.this.refreshDisplay(null);
            }
        };
        settings.registerOnSharedPreferenceChangeListener(listener);

        File extDir = getExternalFilesDir(null);
        String path = extDir.getAbsolutePath();
        UIHelper.displayText(this, R.id.textView, path);

        file = new …
Run Code Online (Sandbox Code Playgroud)

android outputstream file

7
推荐指数
1
解决办法
2万
查看次数

没有缓冲的OutputStreamWriter是否存在?

我需要将一个流转换char为一个bytes 流,即我需要一个从java.io.Writer接口到a 的适配器java.io.OutputStream,支持任何有效的Charset,我将作为配置参数.

但是,java.io.OutputStreamWriter该类有一个隐藏的秘密:sun.nio.cs.StreamEncoder它委托给下面的对象创建一个8192字节(8KB)的缓冲区,即使你没有要求它.

问题是,OutputStream最后我插入了一个需要计算正在写入的字节数的包装器,以便在输出特定数量的字节后立即停止执行源系统.如果OutputStreamWriter正在创建一个8K缓冲区,我只是被告知生成的字节数太晚,因为它们只会在缓冲区刷新时到达我的计数器(所以已经有超过8,000个已经生成的字节在等待我OutputStreamWriter缓冲).

所以,问题是,有没有在Java运行时的任何地方Writer- > OutputStream桥可以运行无缓冲

我真的,真的很讨厌自己写这个:( ...

注意:在每次写入时按下flush()OutputStreamWriter不是有效的替代方法.这会带来很大的性能损失(synchronized涉及到一个块StreamEncoder).

注2:我知道可能有必要在桥上保留一个小的char溢出来计算代理.这不是我需要在它生成第n个字节的那一刻停止执行源系统(这是不可能的,因为给定的字节可以byte[]write调用中以更大的形式出现给我).但是我需要尽快停止它,等待8K,2K甚至200字节的缓冲区才能刷新,这简直太迟了.

java buffer outputstream writer

7
推荐指数
1
解决办法
863
查看次数

进程可以读取自己的“标准输出”流吗?

进程如何读取自己的输出流?我正在编写自动化测试,该自动化测试在与测试相同的过程中启动了几个应用程序子流程(应用程序)。因此,标准输出是测试输出和应用程序输出的混合。

我想在运行时读取输出流,如果看到应用程序中的错误,则测试失败。这可能/可行吗?如果是这样,我该怎么办?

注意:我知道我可以将应用程序作为独立的进程启动,然后读取它们的输出流。我现在的工作量很大。

还要注意,这并不是Go单元测试如何测试函数输出(stdout / stderr)的伪装,尽管该票据是相似且有用的。另一个问题是关于捕获单个函数调用的输出。该票证是关于连续读取整个流的信息。正确答案也有所不同-它需要管道。

multithreading outputstream go output

7
推荐指数
1
解决办法
86
查看次数