java - Outputstream 的结果需要与列表具有可比性
问题描述
我需要编写一个允许我输入字符串列表的方法,将它们提供给 OutputStream 对象并将其返回,并且它需要通过 JUnit 测试进行比较。
我的方法:
public void gebeAus(OutputStream out, StringListe zeilen) {
byte[] bytesArr;
try {
for(int i = 0; i < zeilen.size(); i++) {
bytesArr = zeilen.get(i).getBytes();
out.write(bytesArr);
out.write('\n');
}
out.flush();
out.close();
}
catch (IOException e) {
e.getStackTrace();
}
}
我写入测试类的 JUnit 测试部分:
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
public class SortTest {
private static String[] strings = { "Das", "ist", "ein", "Test", "zum", "Sortieren", "von", "Strings" };
public static void main(String[] args) {
DateiSortierer ds = new DateiSortierer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String[] test = {"asfas", "aws", "jzrfjc", "dfhfds", "asfewfg", "wertgwertw"};
StringListe l = new StringListe();
l.addAll(Arrays.asList(test));
ds.gebeAus(baos, l);
System.out.println(l);
System.out.println(baos);
}
}
list 的输出是 [asfas, aws, jzrfjc, dfhfds, asfewfg, wertgwertw] 而我的 OutputStream 的输出是 asfas aws jzrfjc dfhfds asfewfg wertgwertw
Junit 测试在这里失败。
DateiSortierer:
import java.io.*;
import java.util.*;
public class DateiSortierer {
public StringListe einlesen(String dateiname) throws DateiNichtGefundenAusnahme, IOException {
StringListe liste1 = new StringListe();
File file = new File(dateiname);
BufferedReader br;
try {
br = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
throw new DateiNichtGefundenAusnahme(dateiname);
}
try {
String line = br.readLine();
while (line != null) {
liste1.add(line);
line = br.readLine();
}
}
finally {
br.close();
}
return liste1;
}
public StringListe sortiere(StringListe unsortierteListe)
throws IllegalArgumentException {
if(unsortierteListe == null) {
throw new IllegalArgumentException("null ist ein ungueltiges Argument.");
}
try {
Collections.sort(unsortierteListe);
}
catch (IllegalArgumentException e) {
}
return unsortierteListe;
}
public void gebeAus(OutputStream out, StringListe zeilen) {
byte[] bytesArr;
try {
for(int i = 0; i < zeilen.size(); i++) {
bytesArr = zeilen.get(i).getBytes();
out.write(bytesArr);
out.write('\n');
}
out.flush();
out.close();
}
catch (IOException e) {
e.getStackTrace();
}
}
public void sortiereDatei(String dateiname) {
DateiSortierer listen = new DateiSortierer();
listen.einlesen(dateiname);
listen.sortiere(listen);
listen.gebeAus(out, zeilen);
}
}
字符串列表:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* eine Liste die Zeichenketten enthaelt
* @author schreier
*
*/
public class StringListe extends LinkedList<String> {
/**
* erzeugt eine neue leere Liste
*/
public StringListe() {
List<String> liste = new ArrayList<String>();
}
}
解决方案
对于我可以收集的内容,将以下行添加到您的代码中应该可以解决您的问题:
String decodedBaos = new String(baos.toByteArray(), StandardCharsets.UTF_8);
您可以decodedBaos
与l
. 正如我评论的那样,我建议您使用该方法assertLinesEqual()
。
推荐阅读
- c++ - openssl libcrypto.a 和 libmysqlclient.a 关于 `ERR_remove_thread_state' 的多重定义
- proxy - scrapoxy - 如何限制创建的实例数量
- php - 超过 160 个字符的入站消息使用哪个 SMS 服务 API
- vba - 如何让循环在 VBA 中工作?
- javascript - 谁能告诉我打字稿中的 setInterval() 方法到底是什么?
- android - 使用 LiveData 时如何从 Room 中检索自动生成的 ID?
- python - 使用 Traceback 获取函数/类的调用者名称的可堆叠装饰器?
- python - 在 Ubuntu 16.04 中使用 python 安装机器人框架
- regex - 通过正则表达式从文件中获取 AS 路径
- python - 将 exit() 作为全局函数调用会导致 KeyError