我想在一个函数中执行这些操作:
1-连接套接字2-发送查询3-监听数据4-返回数据
但是当我尝试套接字时。即使我将await 放在listen 函数上,它也不会等待。它说这不是未来,而是一个 Stream 对象,但我对 Streams 不了解,所以我被困在这里。我怎样才能按照我说的去做呢?
static sendQuery({required String query,args, dimension}) async {
if(args != null)
args.forEach((element) => query = query.replaceFirst("?", element));
String ip = shared.getData("remote_ip");
int port = shared.getData("remote_port");
String data = "";
await Socket.connect(ip, port,timeout: Duration(seconds: 5)).then((soket) {
soket.write(query);
soket.listen((Uint8List buffer) async {
String _buffer = String.fromCharCodes(buffer);
data += _buffer;
},
onDone: () {});
});
print("Data has returned. Length of data: ${data.length}");
return data;}
Run Code Online (Sandbox Code Playgroud) 我有一个Map<String, List<MyObject> myMap。如何将所有 List 值连接到一个List<MyObject>(不包括 String 键)?
我尝试过这个
List<MyObject> list = new ArrayList<MyObject>(myMap.values())
Run Code Online (Sandbox Code Playgroud)
但这不适用于集合。
还考虑过迭代地图并将每个列表加入到新列表中,但希望有更好的方法。
我正在尝试使用流按国籍对我的对象进行分组并将其打印出来。
但它说:“无法解析方法'println”
class Person {
private String name;
private int age;
private String nationality;
public static void groupByNationality(List<Person> people) {
people
.stream()
.collect(Collectors.groupingBy(Person::getNationality))
.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud) 在 Rust 中,我有一堆想要并行执行的异步函数。处理这些函数结果的顺序很重要。我还想在这些函数可用时检索它们的结果。
\n让我不好解释一下。
\n以下是 的描述FuturesOrdered:
\n\n这个“组合器”类似于 FuturesUnordered,但它在 future 集合之上强加了一个顺序。虽然集合中的 future 将并行完成\n,但结果将仅按其原始 future 添加到队列的顺序返回。
\n
到目前为止,一切都很好。现在看这个例子:
\nlet mut ft = FuturesOrdered::new();\nft.push(wait_n(1)); // wait_n sleeps\nft.push(wait_n(2)); // for the given\nft.push(wait_n(4)); // number of secs\nft.push(wait_n(3));\nft.push(wait_n(5));\nlet r = ft.collect::<Vec<u64>>().await;\nRun Code Online (Sandbox Code Playgroud)\n由于FuturesOrdered\xc2\xa0await 直到所有future 都完成;这就是我得到的:
|--| ++\n|----| ++\n|--------| ++\n|------| ++\n|----------|++\n ++-> all results available here \nRun Code Online (Sandbox Code Playgroud)\n这就是我要的:
\n|--|++\n|----|++\n|--------|++\n|------| ++\n|----------| ++\n \nRun Code Online (Sandbox Code Playgroud)\n换句话说; 我要等待下一个未来;随着剩余的期货不断地完成。另请注意,即使任务#4 在任务#3 之前完成;由于最初的订单,它是在#3 之后处理的。
\n我怎样才能获得像这样同时执行的期货流?我希望有这样的事情: …
const size_t bytes我有一个流,我需要多次用文本 ( )填充精确大小( const char * filler = "Something") ,直到达到字节大小。
像这样:SomethingSomethingSomething或SomethingSome,如果没有更多可用字节,则可以将其截断,但它始终必须是精确的大小。例如字节为 30
const size_t bytes = 30;
const char * text = "Something";
int x = bytes / strlen(text);
for (int j = 0; j < x; j++)
{
for (int i = 0; i < strlen(text); i++)
{
stream << text[i];
}
}
Run Code Online (Sandbox Code Playgroud)
像上面这样,我只能用未截断的单词填充流,而不是:SomethingSomethingSomethingSom(这正好是 30)
我该如何修改这段代码?谢谢你!
我有一个谓词列表 ( List<Predicate<String>>),我想使用or方法将其链接到一个谓词中。我如何使用 Stream API 来实现这一目标?
我有一个用例,我想根据某些条件修改列表中的某些条目,并保留其余条目不变。为此,我正在考虑使用 java 流,但我找不到可行的解决方案。我知道使用filterandmap不会起作用,因为它会过滤掉不满足条件的元素。有什么我可以用的吗?
例子 -
List<Integer> a = new ArrayList<>();
a.add(1); a.add(2);
// I want to get square of element if element is even
// Current solution
List<Integer> b = a.stream().filter(i -> i % 2 == 0).map(i -> i * i).collect(Collectors.toList());
// This outputs - b = [4]
// But I want - b = [1, 4]
Run Code Online (Sandbox Code Playgroud) 我得到java.lang.NullPointerException的 while ((len = in.read(buf , 0 , buf.length)) >= 0)在下面的方法:
public void copy(String src, File dst) throws IOException {
InputStream in = getClass().getResourceAsStream(src);
OutputStream out = new FileOutputStream(dst);
byte[] buf = new byte[1012];
int len;
while ((len = in.read(buf , 0 , buf.length)) >= 0) {
out.write(buf, 0, len);
buf = null;
}
in.close();
out.close();
}
Run Code Online (Sandbox Code Playgroud)
我没有得到它.如果我得到解决方案,我会很感激.谢谢你提前.......
我有以下代码:
public class Interface {
public void exec(){
try {
_inputStream.read();
BufferedReader br = new BufferedReader( new InputStreamReader( _inputStream ));
System.out.println( br.readLine() );
} catch (IOException e) {
}
}
public void setInputStream( InputStream inputStream ){
_inputStream = inputStream;
}
private InputStream _inputStream;
}
public class Run {
public static void main(String[] args) {
Interface ui = new Interface();
ui.setInputStream( new ByteArrayInputStream( "2 4 N".getBytes( Charset.defaultCharset() ) ) );
ui.exec();
}
}
Run Code Online (Sandbox Code Playgroud)
每当我运行这段代码时,我打印出来的都是
" 4 N"
Run Code Online (Sandbox Code Playgroud)
第一个角色已经丢失.我的信息流发生了什么,我该怎么做才能阻止它?
Delphi 2010
我通过自定义TCP套接字控件传输图像使用UTF-8
客户端
var
TSS: TStringStream;
STR :String;
JPG:TJPEGImage;
BMP:TBitmap;
begin
Try
BMP.LoadFromFile('C:\1.bmp');
JPG.Assign(BMP);
JPG.CompressionQuality:=80;
JPG.Compress;
TSS:=TStringStream.Create;
JPG.SaveToStream(TSS);
STR:=TSS.DataString;
MyTCPSocket.SendString(STR);
finally
BMP.free;
JPG.free;
TSS.free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
服务器端
Var
TSS: TStringStream;
TSS:=TStringStream.Create;
TSS.WriteString(STR);
TSS.SaveToFile('C:\2.jpg');
Run Code Online (Sandbox Code Playgroud)
这段代码在同一台PC上运行很棒.
当我将图像发送到使用不同编码的其他PC接收图像但我在数据中看到许多错误字符"?????"时的问题
我认为当TStringStream将字节写入文件时,它无法将unicode字符转换为字节,因此它看起来像"?"
任何想法都非常感谢