相关疑难解决方法(0)

Android - 从Uri到InputStream到字节数组?

我试图从Android Uri到字节数组.

我有以下代码,但它一直告诉我字节数组长61个字节,即使文件非常大 - 所以我认为它可能将Uri 字符串转换为字节数组,而不是文件:(

  Log.d(LOG_TAG, "fileUriString = " + fileUriString);
  Uri tempuri = Uri.parse(fileUriString);
  InputStream is = cR.openInputStream(tempuri);
  String str=is.toString();
  byte[] b3=str.getBytes();
  Log.d(LOG_TAG, "len of data is " + imageByteArray.length
     + " bytes");
Run Code Online (Sandbox Code Playgroud)

请有人帮我弄清楚该怎么办?

输出为"fileUriString = content:// media/external/video/media/53","len of data为61字节".

谢谢!

android

32
推荐指数
3
解决办法
5万
查看次数

FileInputStream.read()什么时候阻止?

问题类似于以下两个问题.

但我仍然无法完全理解它.

到目前为止,我认为以下代码中的read()方法将因空文件'test.txt'而阻塞.

FileInputStream fis = new FileInputStream("c:/test.txt");
System.out.println(fis.read());
System.out.println("to the end");
Run Code Online (Sandbox Code Playgroud)

实际上它会打印-1,我想知道为什么.

javadoc说如果还没有输入,则此方法会阻塞.

什么" 没有输入可用 "是什么意思?

谢谢.

java inputstream blocking fileinputstream java-io

5
推荐指数
1
解决办法
3319
查看次数

Java IO输入流在读取标准输出和外部C程序的标准错误时阻塞

我几天前在这里发布了同样的问题(Java使用输入流读取外部程序的标准输出),我在阅读时遇到了一些块的优点(while(is.read())!= -1)),但我仍然无法解决问题.

在阅读了这个类似问题的答案后,

Java InputStream阻塞读取 (尤其是Guss发布的答案),

我开始相信,如果程序是交互式的,那么使用is.read()!= -1条件循环输入流是不起作用的(即它需要来自用户的多个输入并在后续输入时显示附加输出,并且只有在给出显式退出命令时,程序才会退出).我承认我对多线程知之甚少,但我认为我需要的是一种在需要用户输入时立即暂停输入流线程(stdout,stderr各一个)的机制,并在输入后恢复提供以防止阻止.以下是我当前的代码,该代码在指示的行上遇到了一个块:

EGMProcess egm = new EGMProcess(new String[]{directory + "/egm", "-o",
                "CasinoA", "-v", "VendorA", "-s", "localhost:8080/gls/MessageRobot.action ",
                "-E", "glss_env_cert.pem", "-S", "glss_sig_cert.pem", "-C", "glsc_sig_cert.pem",
                "-d", "config", "-L", "config/log.txt", "-H", "GLSA-SampleHost"}, new String[]{"PATH=${PATH}"}, directory);

    egm.execute();

    BufferedReader stdout = new BufferedReader(new InputStreamReader(egm.getInputStream()));
    BufferedReader stderr = new BufferedReader(new InputStreamReader(egm.getErrorStream()));

    EGMStreamGobbler stdoutprocessor = new EGMStreamGobbler(stdout, egm);
    EGMStreamGobbler stderrprocessor = new EGMStreamGobbler(stderr, egm);

    BufferedWriter stdin = new BufferedWriter(new OutputStreamWriter(egm.getOutputStream()));


    stderrprocessor.run(); //<-- the block occurs here!
    stdoutprocessor.run();


    //EGM/Agent test …
Run Code Online (Sandbox Code Playgroud)

java java-io

4
推荐指数
1
解决办法
2687
查看次数

RXTX串行连接 - 阻塞read()的问题

我试图使用RXTX库阻止Windows上的串行通信(XP和7).我已经在两端测试了与Hyperterminal的连接,并且它可以完美地工作.

我使用以下代码设置连接:(为清晰起见,省略了异常处理和防御性检查)

private InputStream inStream;
private OutputStream outStream;
private BufferedReader inReader;
private PrintWriter outWriter;
private SerialPort serialPort;
private final String serialPortName;

public StreamComSerial(String serialPortName) {
this.serialPortName = serialPortName;
CommPortIdentifier portIdentifier;
portIdentifier = CommPortIdentifier.getPortIdentifier(serialPortName);
CommPort commPort = null;
commPort = portIdentifier.open(this.getClass().getName(),500);
serialPort = (SerialPort) commPort;    serialPort.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
inStream = serialPort.getInputStream();
outStream = serialPort.getOutputStream();
inReader = new BufferedReader(new InputStreamReader(inStream, Settings.getCharset()));
outWriter = new PrintWriter(new OutputStreamWriter(outStream, Settings.getCharset()));
Run Code Online (Sandbox Code Playgroud)

我用的时候

outWriter.println("test message");
flush();
Run Code Online (Sandbox Code Playgroud)

在另一端收到的消息很好,但是打电话

inReader.readLine()
Run Code Online (Sandbox Code Playgroud)

imidiately返回"java.io.IOException:底层输入流返回零字节".

然后我决定尝试实现自己的阻塞读取逻辑并写下:

public String readLine() throws IOException {        
    String line = …
Run Code Online (Sandbox Code Playgroud)

java serial-port rxtx

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