Windows 7'de Program (Windows 7'de Program) kullanarak bir dizüstü bilgisayara WiFi aracılığıyla bir görüntü göndermesi gereken bir Android Uygulaması (Android 5.0) var.). Görüntüyü gönderdiğimde, Laptop Android cihaz tarafından gönderilen doğru bayt miktarını alır. Ancak, görüntüyü bir dosyaya kaydetmek istediğimde, aldığımdan daha fazla kaydedildi. Bu yüzden onu açamıyorum. Görüntünün çok büyük veya hasarlı olduğunu anladım. Notepad ++ 'da daha yakından bakıldığında, ikili veriler dizüstü bilgisayarın yan tarafında çok fazla boş satır olması dışında doğru gibi görünüyor.Bir görüntüyü Android'den Windows'a Wi-Fi yoluyla gönderirken/kaydederken çok fazla veri
Bir Örnek:
Görüntü Sended:
Uzunluk 273.650
Hatları 1975
Kelimeler 31088
Görüntü Alınan ve Kaydedilen:
Uzunluk 274.663
Hatları 1979
Kelimeler 31088
Dizüstü Bilgisayar, WiFi yoluyla 273650 Byte alır, ancak kaydederken dosyayı genişletir. Çizgileri elle silmek sorunu çözmedi. Kaydedilen dosyada hala çok fazla veri var.
Android Kod
try {
final OutputStream outputStream = streamSocket.getOutputStream();
final ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
thermalBitmap.compress(Bitmap.CompressFormat.PNG, 100, bufferStream);
bufferStream.flush();
(new Thread() {
@Override
public void run() {
super.run();
try {
synchronized (streamSocket) {
bufferStream.writeTo(outputStream);
outputStream.flush();
}
bufferStream.close();
} catch (IOException ex) {
Log.e("STREAM", "Error sending frame: " + ex.toString());
}
}
}).start();
} catch (Exception ex){
Log.e("STREAM", "Error creating PNG: "+ex.getMessage());
}
C++ Kod
void do_read()
{
auto self(shared_from_this());
socket_.async_read_some(boost::asio::buffer(data_, max_length),
[this, self](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
std::string test = std::string(data_, length);
std::ofstream myfile("Test.png", std::ios::app);
if (myfile.is_open())
{
myfile << test;
myfile.close();
}
}
});
}
sorun ne olabilir Herhangi Fikir? Soket programlamaya nispeten yeniyim. Her yardım takdir edilir.
İkili verileri kaydetmek için dize I/O kullanmamalısınız. Ve neden görüntüyü doğrudan soket çıkış akımına sıkıştırmıyorsunuz? Hiçbir zaman 'ByteArrayOutputStream' aramasına ihtiyacınız yok. Sadece zaman ve mekan kaybıdır. – EJP
Bunu değiştireceğim, cevap için teşekkürler. Ama sorunu çözmedi. – harLfkk
Akışlarla ilgili kısım sorun değil. Bu yüzden bir cevap yerine yorum olarak yayınladım. Dizelerle ilgili kısım, sorunun en azından bir kısmıdır. – EJP