Joh*_*nak 6 java ftp inputstream java-io
要将数据发送到我的FTP服务器上的文件,我需要创建一个自定义的InputStream实现,逐行读取数据库数据,将其转换为CSV并通过其read()方法发布它:从数据库中,我得到一个List<Application>对象数据.对于每个Application对象,我想在CSV文件中创建一行.
我的想法是在构造函数中加载所有数据,然后覆盖read方法.我是否需要覆盖所有InputStream的方法?我尝试谷歌搜索一些例子,但没有成功 - 你最终能给我一个链接吗?
你只需要实现没有参数的read()方法.所有其他方法都实现为对该方法的调用.出于性能原因(甚至易于实现),可能更容易实现三参数read()方法,并read()根据该方法重新实现no-args 方法.
我在实施时遇到的一些非常重要的问题InputStream.
覆盖available().正如Javadoc所说:
类InputStream的可用方法始终返回0.此方法应由子类重写.
不重写此方法将导致任何诱惑测试此流是否可读返回false.例如,如果您将自己提供inputStream给a inputStreamReader,则在您调用时,此阅读器将始终返回falsereader.ready().
返回-1 read().该文件没有强调它:
如果由于到达流末尾而没有可用字节,则返回值-1.此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常.
如果你选择read()在没有数据时阻止,你必须记住return -1在某些情况下.不执行此操作可能会导致read(byte b[], int off, int len)源中的以下代码的另一个块:
for (; i < len ; i++) {// default len is a relative large number (8192 - readPosition)
c = read();
if (c == -1) {
break;
}
b[off + i] = (byte)c;
}
Run Code Online (Sandbox Code Playgroud)
这导致一些(如果不是全部)高级读取块,如读者readLine(), read()等.
| 归档时间: |
|
| 查看次数: |
13202 次 |
| 最近记录: |