'dan hem metin hem de ikili verileri okuyun İkili bir akıştan veri okumaya çalışıyorum, bunun kısımları UTF-8 olarak ayrıştırılmalıdır. KullanılmasıInputStream
doğrudan ikili veri için InputStream
ve maksimum okumak için söylendi olsa bile okuyucu öncesinde okuyup pisliği sonraki ikili veri gibi çalışmıyor UTF-8 metin için bunun üstüne bir InputStreamReader
n
karakterden oluşuyor.
Bu sorunun Read from InputStream in multiple formats'a çok benzediğini biliyorum, ancak önerilen çözüm, HTTP akışlarına özeldir, bu bana yardımcı olmuyor.
Her şeyi sadece ikili veri olarak okuyup ilgili parçaları metne dönüştürmeyi düşündüm. Ama sadece karakter verilerinin uzunluk bilgisini, bayt cinsinden değil, karakterlerde var. Böylece, kodlamanın farkında olmak için akıştan karakterleri okuyan şeylere ihtiyacım var.
InputStreamReader'a, belirtilen karakter sayısını okumak için gerekenden fazlasını okumaya söylememesinin bir yolu var mı? Ya da bir kodlama ile hem ikili verileri hem de metni destekleyen bir okuyucu var ve bu modlar arasında anında geçiş yapılabilir mi?
Sorun, UTF8 ile, bayt sayısı karakter sayısından farklı olabilir. Bu yüzden dizede çok baytlı karakterlerin sayısını bulmalı, daha fazla bayt oku ve tekrar çevirmeli ve sayılar eşleşene kadar bunu tekrar etmem gerek. – tajmahal
Biçimlendirmenizin kodunu çözmeyi çok kolay olmadığını söyleyebilirim ve yapabiliyorsanız bunu düzeltirim. Ancak, karakter sayısını biliyorsanız, UTF-8'i kendiniz ayrıştırabilirsiniz. (Ancak gerçek sayı baytlarını göndermek çok daha kolay olurdu) –
Başka bir yaklaşım, ihtiyaç duyulandan daha fazla veri okumaktır. Beklenen karakterlerin sayısını al, ör. substring() ve uzunluğu belirlemek için UTF-8'e dönüştürülür. İşaretle() ve sıfırla() kullanarak ve şimdi bildiğiniz uzunluğu okuyun. (Bu sadece UTF-8 kodlaması tam olarak aynıysa çalışır: | nul bayt \ 0, iki farklı yolla kodlanır.(diğer karakterler olabileceği gibi) –