标签: inputstream

如何使用jni将数据从java InputStream移动到c ++中的char *?

如何使用 JNI 将存储在 java InputStream 中的数据移动到 c++ 中的 char *?

谢谢,卡洛斯。

c++ java java-native-interface inputstream

0
推荐指数
1
解决办法
4963
查看次数

从多个方法读取单个InputStream

我已经在类中的单个方法中初始化了一个InputStream,并将其传递给下一个方法进行处理。InputStream本质上封装了用于处理的CSV文件。

另一种方法调用传入同一 InputStream 的 2 个不同方法,一个用于检索标头,另一个用于处理内容。该结构如下所示:

main() {
  FileInputStream fis = new FileInputStream("FileName.CSV");
  BufferedInputStream bis = new BufferedInputStream(fis);
  InputStreamReader isr = new InputStreamReader(bis);

  processCSV(isr);
}

processCSV(Reader isr) {
  fetchHeaders(isr);
  processContentRows(isr);
}

fetchHeaders(Reader isr) {
  //Use BufferedReader to retrieve first line of CSV
  //Even tried mark() and reset() here
}

processContentRows(Reader isr) {
  //Cannot read the values, fetches null from InputStream :(
}
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么吗?有什么方法可以在不同的方法调用之间重用 InputStream 吗?

我正在提出可以模拟以下问题的完整程序:

  import java.io.FileInputStream;
  import java.io.BufferedInputStream;
  import java.io.InputStreamReader;
  import java.io.BufferedReader;

  public class MarkResetTest
  {
    public static …
Run Code Online (Sandbox Code Playgroud)

java inputstream java-io

0
推荐指数
1
解决办法
6132
查看次数

我在Android应用资产中读取和写入文件有什么问题?

代码优先:

AssetManager mgr = DeviceListActivity.this.getApplicationContext().getAssets();

try {
    Log.e("Glenn:", address);
    FileOutputStream fout = mgr.openFd("device/device_address.txt").createOutputStream();
    PrintWriter _fout = new PrintWriter(fout);
    _fout.println(address);
    Log.e("Glenn", address);

    _fout.close();
    fout.close();

    InputStream fin =  mgr.open("device/device_address.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(fin));
    address = br.readLine(); 

    try {
        Log.e("Glenn:", address);
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
} catch (IOException e) {
    e.printStackTrace();
    Log.e("Glenn", "error with OutputStream");
}
Run Code Online (Sandbox Code Playgroud)

前两次Log.e()调用打印的地址值是正确的值,实际上是设备MAC地址.但是,当我试图测试从刚刚写入的文件中读取的地址值时,NullPointerException已经在Log.e()调用中捕获了.这意味着从文件中读取的值是NULL.任何人都可以指出代码有什么问题吗?

android inputstream fileoutputstream bufferedreader android-assets

0
推荐指数
1
解决办法
266
查看次数

它是否正确 ?如何从文件加载字节?

我需要使用Java从文件加载字节.这是正确的吗 ?

InputStream ips=new FileInputStream(file); 
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);                 
String line;
String cle = "" ;
while ((line=br.readLine())!=null){
   cle+=line
}
---> cle.getBytes()
Run Code Online (Sandbox Code Playgroud)

java byte inputstream file bufferedreader

0
推荐指数
1
解决办法
204
查看次数

尝试将inputstream复制到outputstream时出现Java IOException

我试图将输入流图像写入OutputStream以在浏览器中显示图像,这是代码:

try
{
    InputStream input = Filer.readImage("images/test.jpg");
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = input.read(buffer)) != -1)
    {
        responseBody.write(buffer, 0, bytesRead);
    }
}
catch(IOException e)
{
    System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud)

readImage:

public static InputStream readImage(String file) throws IOException {
    try (InputStream input = new FileInputStream(file)) {

        return input;
    }
}
Run Code Online (Sandbox Code Playgroud)

但写作时我收到错误:

java.io.IOException: Stream Closed
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java exception inputstream outputstream ioexception

0
推荐指数
1
解决办法
1304
查看次数

如果字符串存在则不添加字符串

我的输入来自socketusing DataInputSteam,因为我可以将多个不同的字符串值全部分配给同一个clientDayOfWeek字符串,所以我无法弄清楚如何将所有传入的字符串值保存到同一字符串中ArrayList而不替换最后一个值。如果可能的话,我也希望不重复。

       Socket socket = null;
       DataInputStream dataInputStream = null;
       dataInputStream = new DataInputStream(
                              socket.getInputStream());

       String clientDayOfWeek = dataInputStream.readUTF();
       ArrayList<String> ar = new ArrayList<String>();
       String temp = clientDayOfWeek;
       ar.add(temp);
       System.out.print("Items in list: "+ ar);
Run Code Online (Sandbox Code Playgroud)

java sockets string inputstream arraylist

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

如何使用 Java 中的一些解析器在低内存中解析 csv?

我使用了 InputStream,并且在解析时,如果","在一列中有一个,那么它会将其视为单独的列。ex -abc, xyz, "m,n" 那么解析的输出是abc , xyz, m, n 这里 m 和 n 被视为单独的列。

java csv parsing inputstream memory-efficient

0
推荐指数
1
解决办法
937
查看次数

将List转换为InputStream而不创建中间文件

我正在使用一个函数,该函数将获取输入作为 List 和 className,其中我将 List 转换为分隔符文件(中间),然后将文件转换为 InputStream 作为返回值。

这里创建中间文件并删除是一个乏味的过程,因为这会增加时间和性能。

那么有没有另一种方法,我们可以直接将数据从List<Class>带有标头的分隔符(也许我们可以将其存储在List<Object>)中,然后无需创建中间文件,我们可以直接将其转换为InputStream。

<T> InputStream createInputStream(String csvFileName, List<T> listObject, Class className, char csvPreference) {

        ICsvBeanWriter beanWriter = null;
        File file=new File(csvFileName);
        InputStream inputStream=null;
        try {
            CsvPreference DELIMITER = new CsvPreference.Builder('"', csvPreference, "\n").build();

            beanWriter = new CsvBeanWriter(new FileWriter(file), DELIMITER);
            List<String> fieldList = Arrays.stream(className.getDeclaredFields()).map(Field::getName).collect(Collectors.toList());
            CellProcessor[] processors = new CellProcessor[fieldList.size()];
            for (int i = 0; i < fieldList.size(); i++) {
                processors[i] = new Optional();
            }
            String[] header = new String[fieldList.size()];
            fieldList.toArray(header);
            beanWriter.writeHeader(header); …
Run Code Online (Sandbox Code Playgroud)

java inputstream list

0
推荐指数
1
解决办法
5553
查看次数

Java:使用不带行号的 InputStream 和 Apache Commons CSV

这可能非常简单,但我还没有找到执行此操作的选项。我正在尝试使用 Apache Commons CSV 读取文件以供以后验证。有问题的 CSV 作为输入流提交,它似乎在读取文件时向文件添加了一个附加列,其中包含行号。如果可能的话,我希望能够忽略它,因为标题行不包含数字,这会导致错误。InputStream 中是否已有选项可以执行此操作,或者我必须设置某种后处理?

我使用的代码如下:

public String validateFile(InputStream filePath) throws Exception{
        System.out.println("Sending file to reader");
        System.out.println(filePath);
        InputStreamReader in = new InputStreamReader(filePath);
        //CSVFormat parse needs a reader object
        System.out.println("sending reader to CSV parse");
        for (CSVRecord record : CSVFormat.DEFAULT.withHeader().parse(in)) {
            for (String field : record) {
                System.out.print("\"" + field + "\", ");
            }
            System.out.println();
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

使用时withHeader(),我最终出现以下错误:

java.lang.IllegalArgumentException: A header name is missing in [, Employee_ID, Department, Email]
Run Code Online (Sandbox Code Playgroud)

我不能简单地跳过它,因为我需要对标题行进行一些验证。

另外,这里还有一个 CSV 文件示例:

"Employee_ID", "Department", …
Run Code Online (Sandbox Code Playgroud)

java csv inputstream apache-commons-csv

0
推荐指数
1
解决办法
5966
查看次数

读取文本文件时无限循环

我想从文本文件中读取一些数据.这是文本文件中数据的格式:

A,20, ,0
B,30, ,0
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public ArrayList rechercherSalle() 
{
    String nom;
    String ligne;
    ArrayList<Salle> listeSalles = new ArrayList<Salle>();
    Salle salle = new Salle();
    try {
        InputStream flux = new FileInputStream("salle.txt");
        InputStreamReader lecture = new InputStreamReader(flux);
        BufferedReader buff = new BufferedReader(lecture);
        ligne = buff.readLine();
        while (ligne != null) {
            String[] objetSalle = ligne.split(",");
            nom = objetSalle[0];
            String capacite_maxString = objetSalle[1];
            Integer capacite_max = Integer.parseInt(capacite_maxString);
            String capacite_actuelleString = objetSalle[3];
            Integer capacite_actuelle = Integer.parseInt(capacite_actuelleString);
            String proprietaire = objetSalle[2];
            salle = new Salle(); …
Run Code Online (Sandbox Code Playgroud)

java buffer inputstream outputstream

-1
推荐指数
1
解决办法
126
查看次数