Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
iki stream'i birleştirmek
#11
(Dün, Saat: 10:44)bibilen Adlı Kullanıcıdan Alıntı: bu çözümü düşündüm, mantıklı gibi de görünüyor ama göründüğü gibi değil iş.
2 nolu maddede sıkıntı var. stream2 ileri taşıma işini geçici bir stream kullanmadan yapamıyoruz çünkü kendi kendinin üstüne yazmamız gerekiyor o da olmuyor tabi. geçici stream kullanınca da yine stream2'nin iki katı kadar hafızada geçici de olsa işgaliyet oluyor, esas amaç bunu aşmaktı zaten.

Bence 2. maddede sıkıntı yok. Elbette ikinci bir stream tanımlamadan stream'i kendi içinde ileriye taşıyabilirsin  Wink
There's no place like 127.0.0.1
WWW
Cevapla
#12
Evet sonunda çözdüm ve bir prosedür haline getirdim.

Gerçi bu prosedürdeki Move komutunun hafızayı istediğim gibi verimli kullanıp kullanmadığı konusunda emin değilim.
Bundan daha iyi bir çözüm de bulamadım.
Burada Move komutunun olduğu satır anahtar satır, bu komutun hafızayı nasıl kullandığını bilmiyorum. Çünkü aynı adres aralığının üzerinde okuma yazma yapıyorum ama çakışma olmuyor ve çalışıyor. Burada çakışma olacağını öngörmüştüm ve bu yönetimin başarısız olacağını düşünmüştüm ama başarılı oldu. Muhtemelen Move komutu taşınacak veriyi yine geçici bir bölge alıyor, yoksa taşıma esnasında okuduğu yere yazacak ve çakışma olacaktı.

Daha sonra bulduğum bir yazıda da move komutu için şunu diyor : "If copying from the current string to another part of the same string, then Copy works intelligently, preserving data where appropriate."

Yani aynı adres bölgesinde çalışırsan çakışma olmayacağı buradan anlaşılıyor. Hafıza kullanımı konusunu test edemeyeceğim ama bu konu ile daha fazla da uğraşmak istemiyorum.

Hatta 2.stream'i 1.stream'in sadece başına değil istediğiniz yerine insert edebiliyorsunuz.

Belki birilerinin işine yarar diye prosedürü paylaşıyorum:

procedure InsertStream(Source: TMemoryStream; Dest: TMemoryStream; Index: Integer);
var
 OldDestSize: Integer;
 Src, Dst: ^Byte;
begin
 if Index > Dest.Size then
  Index := Dest.Size;

 OldDestSize := Dest.Size;
 Dest.SetSize(Dest.Size + Source.Size);
 Src := Dest.Memory;
 Inc(Src, Index);
 Dst := Src;
 Inc(Dst, Source.Size);
 Move(Src^, Dst^, OldDestSize - Index);
 Dest.Position := Index;
 Source.Position := 0;
 Dest.CopyFrom(Source, Source.Size);
end;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  String'e çevrilmiş Stream Veri JsontoDataSet Dönüştürme Sorunu. pro_imaj 13 2.942 06-03-2020, Saat: 15:19
Son Yorum: Fesih ARSLAN
  [Çözüldü] HTTP üzerinden RTSP ile IP kamera stream işlemek Abdullah ILGAZ 3 2.936 06-03-2019, Saat: 00:47
Son Yorum: Yeliz
  Video stream yhackup 9 3.291 26-12-2017, Saat: 20:56
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi